2010-08-08 44 views
9

Estoy cargando un archivo de punta personalizado para personalizar las celdas de una UITableView. El plumín personalizado tiene un UILabel al que se hace referencia desde la vista principal por etiqueta. Me gustaría saber si es posible cambiar el color de sombra de UILabel cuando la celda se selecciona con un color diferente para que no se vea como en la captura de pantalla.sombra de UILabel del color seleccionado de la celda personalizada

screenshot

Respuesta

11

Usted podría cambiar la etiqueta del color de la sombra en -tableView:willSelectRowAtIndexPath: en el delegado. Por ejemplo:

-(NSIndexPath*)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor greenColor]; 
    return indexPath; 
} 
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor redColor]; 
} 
+3

Esta respuesta no funciona para el estado de celda resaltada (es decir, si el usuario presiona una celda pero no la suelta). La respuesta de Jason es desafortunadamente la mejor que he visto para lidiar con este caso. Es desafortunado que involucra subclases. Es posible que también deba sobrescribir setSelected: – Prometheus

16

prefiero hacer el cambio de color de la sombra dentro del código TableCell para no contaminar el delegado. Puede reemplazar este método para manejar la situación:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animate 
{ 
    UIColor * newShadow = highlighted ? [UIColor clearColor] : [UIColor whiteColor]; 

    nameLabel.shadowColor = newShadow; 

    [super setHighlighted:highlighted animated:animate]; 
} 
0

La respuesta simple, al menos para el ejemplo anterior, es no mostrar la sombra en el primer lugar. Como de todos modos no puede ver el blanco sobre blanco, configure shadowColor en -clearColor.

Si realmente necesita una sombra, anular el método -setHighlighted es la mejor solución. Mantiene el código con la celda, que creo que es mejor que tratar de manejarlo desde la vista de tabla.

2

Tuve el mismo problema y ninguna de las soluciones anteriores funcionó para mí: no quería la subclase UITableViewCell y también tenía algunos cambios de estado seleccionados/resaltados complicados realizados programáticamente, que no funcionaban bien con las soluciones anteriores .

MySolution:

Lo que hice al final es utilizar un segundo UILabel debajo de la primaria UILabel para actuar como una sombra. Para esa 'sombra' UILabel puede establecer 'Color resaltado' en 'Borrar color'.

Obviamente tiene que actualizar la etiqueta de sombra cada vez que actualiza la etiqueta principal. No es un gran precio a pagar en muchos casos.

Espero que ayude!

Cuestiones relacionadas