Animación del backgroundColor de UITableViewCell en animación de bloque

Estoy tratando de animar los colores de fondo de dos celdas de la tabla desde el rojo hasta el color original, blanco.

El siguiente código es lo que estoy usando. El problema es que nunca muestra el color rojo, simplemente se anima de blanco (original) a blanco (animado). Es decir, si cambio el color en el bloque de animación, se animará a ese color.

[table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]].backgroundColor = [UIColor redColor];
[table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]].backgroundColor = [UIColor redColor];

[UIView animateWithDuration:0.8 delay:0.2 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    [table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]].backgroundColor = [UIColor whiteColor];
    [table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]].backgroundColor = [UIColor whiteColor];
}
completion:^(BOOL finished) {

}];

El siguiente código funciona como se esperaba para el fondo de la tabla, pero eso no es lo que quiero:

table.backgroundColor = [UIColor redColor];

[UIView animateWithDuration:0.8 delay:0.2 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    table.backgroundColor = [UIColor clearColor];
}
completion:^(BOOL finished) {

}];

Entonces, ¿por qué el fondo de mi celda no se anima cuando el fondo de mi tabla sí lo hace?

Por lo que vale, tengo un montón de otras animaciones encadenadas que realizo en la vista de tabla justo después de esto, pero después de haber comentado esas animaciones, todavía tengo este problema.

preguntado el 11 de junio de 12 a las 17:06

Las celdas de TableView son un poco mágicas con su color de fondo. Solo se le permite establecer el color de fondo de una celda (a través de la backgroundColor propiedad de UIView) En la tableView:willDisplayCell:forRowAtIndexPath: método y en ningún otro lugar. Consulte la documentación para obtener más información. desarrollador.apple.com/library/ios/#documentation/UIKit/Reference/… -

2 Respuestas

Porque una celda contiene otras vistas. Tienes que comprobar el color de cell.contentView, cell.accessoryView y cell.backgroundView. Si todos estos son [UIColor clearColor], solo puedes animar cell.backgroundColor.

Respondido el 11 de junio de 12 a las 17:06

Parece que @Jason Coco tiene razón. No puedo hacerlo (limpia y rápidamente):

De Apple:

Nota: si desea cambiar el color de fondo de una celda (estableciendo el color de fondo de una celda a través de la propiedad backgroundColor declarada por UIView), debe hacerlo en el método tableView:willDisplayCell:forRowAtIndexPath: del delegado y no en tableView :cellForRowAtIndexPath: del origen de datos. Los cambios en los colores de fondo de las celdas en una vista de tabla de estilo de grupo tienen un efecto en iOS 3.0 que es diferente a las versiones anteriores del sistema operativo. Ahora afecta el área dentro del rectángulo redondeado en lugar del área fuera de él. Referencia

Entonces, si realmente quisiera, tendría que establecer alguna variable, luego llamar reloadData sobre la mesa o algo similar.

Respondido el 11 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.