cell.backgroundColor no responde si se establece en tableView: cellForRowAtIndexPath

Estoy intentando colorear cierta fila de la tabla con rojo así que intenté agregar

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

Aparece la marca de verificación de accesorios, pero no el color rojo.

Más tarde descubrí que colocándolo en tableView: willDisplayCell funciona. ¿Esto es por layout? ¿Por qué está ignorando el valor que ya establecí en el momento de inicializar la celda?

El aspecto de la celda se personaliza en tableView:willDisplayCell . Entonces, para responder a su pregunta, sí, es por layout. Las vistas accesorias y las subvisualizaciones de la contentView de contentView de la celda deben modificarse / asignarse en cellForRowAtIndexPath .

De la documentation de tableView:willDisplayCell:forRowAtIndexPath: ::

Una vista de tabla envía este post a su delegado justo antes de que utilice una celda para dibujar una fila, lo que le permite al delegado personalizar el object de celda antes de que se muestre. Este método le da al delegado la oportunidad de anular las properties basadas en estado establecidas anteriormente por la vista de tabla, como la selección y el color de background. Después de que el delegado regrese, la vista de tabla establece solo las properties de alfa y marco, y solo cuando se animan filas a medida que se deslizan hacia adentro o hacia afuera.

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

cell.contentView.backgroundColor = [UIColor networkingColor];

Esta no es la solución documentada, pero lo siguiente funcionará:

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