¿Cómo puedo personalizar la imagen de divulgación de accesorios en un UITableViewCell?

StackOverflow https://stackoverflow.com/questions/403748

  •  03-07-2019
  •  | 
  •  

Pregunta

Me gustaría usar una versión personalizada de la imagen del accesorio de divulgación estándar en mi UITableView. ¿Cómo puedo hacer esto? Espero que la subclasificación de UITableViewCell no sea necesaria para algo tan básico.

¿Fue útil?

Solución

Necesitará crear una vista personalizada y asignarla a la propiedad accessoryView del objeto UITableViewCell . Algo como:

myCell.accessoryView = [[ UIImageView alloc ] 
                       initWithImage:[UIImage imageNamed:@"Something" ]];

Otros consejos

- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UIImage *indicatorImage = [UIImage imageNamed:@"Arrow.png"];
    cell.accessoryView =[[[UIImageView alloc]  initWithImage:indicatorImage] autorelease];


    return cell;
}

Bueno, hago esto con el código de ayuda que se indica arriba

Me encontré con el mismo problema que Greg: la vista de accesorios no realiza un seguimiento (si utiliza un UIImageView)

Lo resolví así:

UIImage * image = [ UIImage imageNamed:@"disclosure-button-grey.png" ] ;
UIControl * c = [ [ UIControl alloc ] initWithFrame:(CGRect){ CGPointZero, image.size } ] ;

c.layer.contents = (id)image.CGImage ;
[ c addTarget:self action:@selector( accessoryTapped: ) forControlEvents:UIControlEventTouchUpInside ] ;
cell.accessoryView = c ;
[ c release ] ;

Hay un buen ejemplo de Apple muestra cómo usar UIControl para cumplir con este tipo de personalización de accesorios.

Anular - (no válido) drawRect: (CGRect) rect en UIControl no es la forma más fácil, pero le brinda mucha flexibilidad para diseñar bonitas vistas de accesorios.

ingrese la descripción de la imagen aquí

Lo haría de la siguiente manera:

UIImageView *chevronImgVw = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chevron_accessory_vw_img.png"]];
chevronImgVw.frame = CGRectMake(cell.accessoryView.frame.origin.x, cell.accessoryView.frame.origin.y, 10, 20);
cell.accessoryView = chevronImgVw;

Por favor, ¡prueba esto antes de votar! ¡Por el momento tiene 2 upvotes y 2 downvotes!

Probé el código anterior y parece que ya no funciona, tal vez debido a la antigüedad de esta publicación, así que descartaré mi línea que me dio la vista de accesorios personalizada.

[cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrowBtn"]]];

Espero que alguien encuentre esto útil.

NOTA: NO configure una celda personalizada para etiquetar: 0. Esa etiqueta está reservada para la vista textLabel. Si establece etiquetas en Xcode Storyboard, debe establecer etiquetas para vistas / etiquetas personalizadas en 1 o superior.

Note el ejemplo de Apple:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];

    UILabel *label;

    label = (UILabel *)[cell viewWithTag:1];
    label.text = [NSString stringWithFormat:@"%d", indexPath.row];

    label = (UILabel *)[cell viewWithTag:2];
    label.text = [NSString stringWithFormat:@"%d", NUMBER_OF_ROWS - indexPath.row];

    return cell;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top