He añadido una sombra de texto a las células en mi UITableView para darles un aspecto grabado:Extracción sombra texto en UITableViewCell cuando se selecciona
cell.textLabel.textColor = [UIColor colorWithWhite:0.2 alpha:1.000];
cell.textLabel.shadowColor = [UIColor whiteColor];
cell.textLabel.shadowOffset = CGSizeMake(0, 1);
Puesto que el color de la sombra es en realidad blanco, cuando una fila se selecciona y se vuelve azul, la sombra blanca se vuelve realmente visible y hace que el texto se vea feo.
¿Alguien sabe cómo puedo eliminar la sombra antes de que se aplique el estilo de selección de celda predeterminado?
que he intentado:
- Usando
-tableView:willSelectRowAtIndexPath:
a desarmar la sombra concell.textLabel.shadowColor = nil
pero esto no funciona en el tiempo - la sombra consigue desarmar sólo después de que se aplica el estilo de selección azul. - Comprobando
cell.selected
entableView:cellForRowAtIndexPath:
antes de configurar la sombra, pero esto obviamente no funciona ya que la celda no se vuelve a dibujar después de una selección.
También intenté sobreescribir el método delegado -tableView:willDisplayCell:forRowAtIndexPath:
como Kevin sugirió a continuación. De las declaraciones de registro que puse, este método de delegado solo se llama justo antes de que se dibuje una celda: cuando se toca una celda, ya es demasiado tarde. Este es el código que utilicé
(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"in willDisplayCell");
if (cell.highlighted || cell.selected) {
NSLog(@"drawing highlighed or selected cell");
cell.textLabel.shadowColor = nil;
} else {
cell.textLabel.shadowColor = [UIColor whiteColor];
}
}
En realidad, puede que necesite anular setHighlighted: animado y no tocar setSelected: animado en absoluto. Lo probaría primero. –
¡Gracias, Mike! Esto funciona perfectamente –
Puedo confirmar que debe sobrescribir ambos. La celda se resalta cuando la toca, luego se selecciona cuando levanta el dedo. Si solo anulas setHighlighted :, la sombra volverá a aparecer cuando finalice el toque.Incluso si pasa a otra vista después de la selección, es notable. – benzado