2012-01-12 20 views
6

Estoy tratando de colorear cierta fila de la tabla con rojo así que traté de añadircell.backgroundColor no responder si se establece a tableView: cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
... init Code here 
cell.backgroundColor = [UIColor redColor]; 
cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 

Aparece el accesorio de la marca de cotejo pero no el color rojo.

Más tarde encontré que al colocarlo en tableView: willDisplayCell funciona. ¿Esto es por diseño? ¿Por qué está ignorando el valor que ya configuré en el momento de inicializar la celda?

Respuesta

3

El aspecto de la celda está personalizado en tableView:willDisplayCell. Entonces, para responder a su pregunta, sí, es por diseño. Las vistas accesorias y las subvistas de contentView de la celda deben modificarse/asignarse en cellForRowAtIndexPath.

De la documentación de tableView:willDisplayCell:forRowAtIndexPath::

una vista de tabla envía este mensaje a su delegado justo antes de que utiliza la célula para dibujar una fila, permitiendo con ello que el delegado para personalizar el objeto de celda antes de ser mostrada. Este método le da al delegado la oportunidad de anular las propiedades basadas en el estado establecidas anteriormente por la vista de tabla, como la selección y el color de fondo. Después de que el delegado regrese, la vista de tabla establece solo las propiedades alfa y de marco, y luego solo cuando se animan las filas a medida que se deslizan hacia adentro o hacia afuera.

1

Para su información, la respuesta de Ravi es correcta, pero si desea simplificar su implementación, también puede configurar el color de fondo contentView de la celda para lograr el mismo efecto.

cell.contentView.backgroundColor = [UIColor redColor];

Ésta no es la solución documentada, pero el siguiente trabajo:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
... init Code here 
    cell.contentView.backgroundColor = [UIColor redColor]; 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
Cuestiones relacionadas