2008-10-21 15 views
11

Un UITableViewCell viene "preconstruido" con un UILabel como su única subvista después de haberlo iniciado. Me gustaría realmente me gusta cambiar el color de fondo de dicha etiqueta, pero no importa lo que hago, el color no cambia. El código en cuestión:Cambiar el color de fondo de un UILabel dentro de una UITableViewCell

UILabel* label = (UILabel*)[cell.contentView.subviews objectAtIndex:0]; 
label.textColor = [UIColor whiteColor]; 
label.backgroundColor = [UIColor darkGrayColor]; 
label.opaque = YES; 

Respuesta

8

el fragmento de código funciona bien para mí, pero debe hacerse después de que la célula ha sido añadido a la mesa y se muestra, creo. Si se llama desde el initWithFrame:reuseIdentifier:, obtendrá una excepción, ya que la subvista UILabel aún no se ha creado.

Probablemente la mejor solución es agregar su propia UILabel, configurada según sus estándares, en lugar de confiar en esta (muy raquítica) ruta de acceso a la integrada.

+0

Bueno, la razón por la que pido en primer lugar es porque yo quiero depender de la ruta de raquítica, es decir: yo no quiero tener que crear mi propia vista secundaria (sí, estoy ese perezoso). ¿Dice que mi código funciona para usted porque cambia el color de fondo? ¿Puede ser más específico sobre cómo lo hizo funcionar? – rpj

+0

Soy perezoso también, pero esto es peligroso ;-) Agregué una llamada diferida en el método init de mi celda que llamó a tu código. Cambió el color de fondo (y el color del texto, por supuesto). –

2

Agregue su propia etiqueta a contentView cuando esté asignando la celda, en lugar de confiar en la extracción del integrado. A continuación, puede controlar todos los valores:

UILabel* label = [[[UILabel alloc] init] autorelease]; 
label.textColor = [UIColor whiteColor]; 
label.backgroundColor = [UIColor darkGrayColor]; 
label.opaque = YES; 
[cell.contentView addSubview:label]; 
+0

Esto no parece funcionar en absoluto, al menos no desde tableView: cellForRowAtIndexPath: donde intento que las cosas funcionen. ¿Algún consejo? – rpj

5

Esto no funciona porque el UITableViewCell establece sus backgroundColors etiqueta en el método layoutSubviews.

Si desea cambiar el color de la etiqueta incorporada textLabel o detailTextLabel, subclass la UITableViewCell y anular layoutSubviews. Llame a la implementación súper, ENTONCES cambie la propiedad backgroundColor a lo que desee.

- (void) layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.textLabel.backgroundColor = [UIColor redColor]; 
} 
0
for (UIView *views in views.subviews) 
{ 
    UILabel* temp = (UILabel*)[views.subviews objectAtIndex:0]; 
    temp.textColor = [UIColor whiteColor];   
    temp.shadowColor = [UIColor blackColor]; 
    temp.shadowOffset = CGSizeMake(0.0f, -1.0f); 
} 
Cuestiones relacionadas