Cambia los colors de text de todas UITableViewCells usando UIAppearance

No puedo cambiar los colors de text de un UITableViewCell utilizando el mecanismo de UIAppearance .

Aquí está mi código con comentarios que muestran lo que está funcionando y lo que no funciona:

 UITableViewCell *cell = [UITableViewCell appearance]; cell.backgroundColor = [UIColor blueColor]; // working cell.textLabel.textColor = [UIColor whiteColor]; // NOT WORKING cell.detailTextLabel.textColor = [UIColor networkingColor]; // NOT WORKING UILabel *cellLabel = [UILabel appearanceWhenContainedIn:[UITableViewCell class], nil]; cellLabel.textColor = [UIColor whiteColor]; // working 

Como puede ver, la segunda forma está funcionando, pero no puedo configurar diferentes colors para text normal y text detallado.

¿Hay algo que estoy haciendo mal?

PS Definir cosas estáticamente en Interface Builder no funcionará para mí: tengo temas que se pueden cambiar dinámicamente durante el time de ejecución.

Estás haciendo lo correcto, pero no hay forma de que iOS pueda distinguir entre esas dos tags usando UIAppearance . Debe establecer el color del text en willDisplayCell o, si realmente desea utilizar UIAppearance , cree subclasss de UILabel personalizadas que pueda orientar con mayor precisión.

Si desea usar willDisplayCell , se vería algo como esto:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { cell.textLabel.textColor = [UIColor blackColor]; cell.detailTextLabel.textColor = [UIColor networkingColor]; } 

Alternativamente, también podría encontrar que esta respuesta tiene otras ideas.

puedes configurar el color del text de esta manera.

 [cell.textLabel setTextColor:[UIColor whiteColor]]; [cell.detailTextLabel setTextColor:[UIColor networkingColor]];