Animación en willSelectRowAtIndexPath después de la validation

Tengo un delegado de vista de tabla que comtesting si se puede seleccionar una celda específica. De lo contrario, la selección se cancela. Para dar al usuario una retroalimentación visual, quiero teñir una label de esta celda en rojo y después de un corto período de time vuelve a colorear en negro:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (true) { // Some simplification MyTableViewCell cell = ... // The correct cell is loaded here [UIView animateWithDuration:0.5 animations:^{ cellToSelect.labelAmount.textColor = [UIColor networkingColor]; } completion:^(BOOL finished) { [UIView animateWithDuration:1.0 animations:^{ cellToSelect.labelAmount.textColor = [UIColor blackColor]; }]; }]; return nil; } return indexPath; } 

Las animaciones no se realizan. En cambio, la celda está simplemente (visualmente) deseleccionada.

EDITAR: Acabo de probar las soluciones propuestas y ninguno parecía funcionar. Así que cavé un poco más y descubrí que puedo hacer animaciones, pero no puedo cambiar el color del text de ninguna label dentro de una celda:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { MyTableViewCell cell = ... cell.labelAmount.textColor = [UIColor networkingColor]; // Now, although the property was set (as I can see in the debugger) // the label is still drawn with standard black text. } 

Además, establecer el color a través de una cadena colorida atribuida no funciona.

Por otro lado, se presenta un cambio de highlightedTextColor consecuencia. Entonces esto funciona.

Esta propiedad – textColor – no es animatable. Use transitionWithView:duration:options:animations:completion:

 [UIView transitionWithView:label duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ label.textColor = [UIColor networkingColor]; } completion:^(BOOL finished) { [UIView transitionWithView:label duration:1.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ label.textColor = [UIColor blackColor]; } completion:nil]; }]; 

Conforme a la documentation de Apple, no puede animar todo lo que desee:

De apple:

Las siguientes properties de la class UIView son animables:

  • marco de propiedad
  • @ límites de propiedad
  • @ centro de propiedad
  • @property transformar
  • @property alpha
  • @property backgroundColor
  • @property contentStretch

Ahora este es un truco para animar lo que quieres:

Por ejemplo, establezca alfa a 1.0, no producirá ningún cambio visual en la vista, pero iniciará la animation

 - (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (true) { // Some simplification MyTableViewCell cell = ... // The correct cell is loaded here [UIView animateWithDuration:0.5 animations:^{ //here the trick set alpha to 1 self.view.alpha = 1; cellToSelect.labelAmount.textColor = [UIColor networkingColor]; } completion:^(BOOL finished) { [UIView animateWithDuration:1.0 animations:^{ cellToSelect.labelAmount.textColor = [UIColor blackColor]; }]; }]; return nil; } return indexPath; }