2010-08-14 8 views
23

¿Siempre que agregue un accesorio View a mi UITableViewCell, no tiene el color de fondo? Estoy configurando un UISwitch como mi accesorioView, y el color que he establecido en la propiedad cell.backgroundColor solo afecta a contentView y no a accessoryView. He intentado todo para establecerlos con el mismo valor. Traté de establecer el cell.backgroundView.backgroundColor y las propiedades de cell.accessoryView.backgroundColor en el color que quiero, pero nada está funcionando. También intenté crear una subvista dentro de contentView, que resolvió el problema backgroundColor (evitándolo), pero crea el problema, donde el interruptor se encuentra en la parte superior de cell.textLabel cuando el texto es demasiado largo.Alteración del color de fondo de cell.accessoryView y cell.editingAccessoryView

¿Hay alguna forma de que pueda modificar el color de fondo del accesorioView sin crear una subvista en contentView o alterar la longitud de cell.textLabel sin subclasificar UITableViewCell?

Respuesta

44

Al leer la documentación (una idea novedosa), encontré el artículo, "A Closer Look at Table-View Cells". Me ayudó a entender la composición de las células, y me encontré con mi respuesta ...

células se ven así ...

alt text

Desde el cell.accessoryView es una vista hermana a la celda. contentView Tuve que pedirle a cell.contentView su superview, y luego pude cambiar el color de fondo de ambas vistas a la vez. Esto es lo que el código es el siguiente ...

// Cell Formatting 
cell.contentView.superview.backgroundColor = [UIColor greenColor]; 

Sé que es muy simple, pero yo soy un novato y me tomó las edades para reducir la velocidad y leer el documento. ¡Con suerte, esto ayuda a otras personas!

+7

Sé que es un poco tarde, pero debe establecer el color de la celda en el método 'tableView: willDisplayCell: forRowAtIndexPath:' :) – Illep

+0

Esto me ayudó, pero como paso adicional tuve que asegurarme de que no para llamar a cualquier método 'setSelected' en la' superclase' de 'UITableViewCell'. Parece que esto establece el color de fondo de ** accessoryView ** en el color de selección predeterminado. – Aerows

1

@Zak, antes que nada, gracias por llamar mi atención sobre los detalles del diseño de la celda. ¡Muy útil!
me gustaría señalar que el siguiente código:

self.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"cell_background.png"]]; 

trabajó para mí. El resultado fue una imagen de fondo que se extiende sobre una celda completa. AccessoryTypeView no lo cubrió! Parte importante es poner este código en el método layoutSubviews de su clase de celda personalizada y no en cellForRowAtIndexPath que se encuentra en la clase TableViewController. En mi caso he definido una clase CustomCell y dentro de ella he definido etiquetas, etc. vistas de imágenes

NOTA: El siguiente código no funcionaba:

cell.contentView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"cell_background.png"]]; 

cuando se coloca dentro de tableView: (UITableView *) tableView cellForRowAtIndexPat método. Me estaba dando los antecedentes que cubrían la celda, pero AccessoryTypeView estaba por encima ...

44
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell.backgroundColor = [UIColor yellowColor]; 
} 
+0

Pero creo que las cosas para colorear deberían pertenecer a la clase de vista. La solución de Adarsh ​​VC es mejor porque podría colocarse en awakeFromNib. – johnlinvc

14
UIView *myView = [[UIView alloc] initWithFrame:cell.frame]; 
myView.backgroundColor = [UIColor colorWithRed:214.00/255.00 green:233.00/255.00 blue:247.00/255.00 alpha:1.0]; 
cell.backgroundView = myView; 
[myView release]; 
1

Si usted quiere mezclar la vista accesorio color de fondo con el color de fondo de la celda, en iOS8 y Swift Esto funcionó como un encanto en el tableView (_, cellForRowAtIndexPath :) método:

let color = cell.contentView.backgroundColor 
cell.backgroundColor = color 
Cuestiones relacionadas