2012-01-13 16 views
6

Tengo una aplicación con guión gráfico. En una escena, tengo una vista de tabla con contenido de células estáticas. ¿Es posible cambiar el color de fondo seleccionado a otro color de las opciones predeterminadas (azul y gris)?Cómo cambiar el fondo seleccionado color storyboard static cells

Sé si puedo cambiar el color de fondo de la celda en forRowAtIndexPath, pero en este caso no tengo ninguna función de fuente de datos de tableview. Estoy seguro de que es posible desde IB u otra función que puedo modificar ...

¡Gracias de antemano!

Respuesta

8

Tuve el mismo problema. La solución tiene dos partes:

1) obtener las celdas, mira this. 2) cambiando el color de fondo: se debe crear un UIView con el color de fondo que necesita y establecerlo como el selectedBackgroundView de la célula

Por ejemplo, he utilizado este código en el viewDidLoad del UITableViewController:

UIView *backgroundSelectedCell = [[UIView alloc] init]; 
[backgroundSelectedCell setBackgroundColor:[UIColor colorWithRed:130/256.0 green:169/256.0 blue:171/256.0 alpha:1.0]]; 

for (int section = 0; section < [self.tableView numberOfSections]; section++) 
    for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) 
    { 
     NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section]; 
     UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath]; 

     [cell setSelectedBackgroundView:backgroundSelectedCell]; 
    } 
+0

Gracias Carlos ... ¿eres español? – Camacho

+0

Este enfoque probablemente funcione. Realmente no sé cómo se comportará cuando tengas un montón de celulares y las volutas de la mesa. En las celdas dinámicas, se almacenan en caché y se descartan cuando sea necesario. Si cambia el fondo durante el método didLoad, se asegurará de que las primeras celdas presentadoras tengan un color de fondo correcto, pero es posible que no garantice que las celdas de desplazamiento conservarán esa referencia. De todos modos, necesita codificación, y una célula estática está diseñada para usar sin la necesidad de codificación ... Publiqué una respuesta que te permite lograr eso sin codificación. –

18

No necesita escribir ni una sola línea de código para lograr eso. Puedes hacerlo todo usando el guión gráfico. Eso sí, que:

  1. Añadir un UIView a su UITableViewCell y vincularlo a la propiedad selectedBackgroundView de la célula (para encontrar esta propiedad, tendrá que arrastrar la línea de la "New Reference Outlet" y soltarlo sobre el deseado UITableViewCell)
  2. cambiar el color de la UIView al color deseado del estado seleccionado

puede hacer lo mismo con la propiedad backgroundView. Además, puede usar un UIImageView para usar una imagen, en lugar del fondo de un solo color de UIView.

Aquí es un archivo de ejemplo usando un UIViewController personalizado en lugar de un UITableViewController, pero funciona en ambos: http://uxp.com.br/downloads/CustomCell.zip

+0

gran enfoque! Esta es la forma de trabajar con guiones gráficos, con la que muchos de nosotros no estamos familiarizados, y cómo se cree que se trabaja con ellos. ¡Gracias! – brainray

+2

¿Cómo lo lograste sin obtener este error? http: // stackoverflow.com/questions/13090338/runtime-error-setting-backroundview-property-of-uitableviewcell-in-storyboard –

+0

No estoy usando AutoLayout. Quizás es por eso que no obtengo ningún error. Pero parece un error para mí. ¿Has llenado un error dentro de Apple? –

-2

Aquí es una solución para aquellos de nosotros usando Auto-Layout en X-Code 5 + ...

Para las celdas estáticas, puede supuestamente cambiar el color de fondo, pero no funcionará. Sin embargo, cada celda individual tendrá automáticamente una Vista de contenido dentro de IB. Si cambiamos el fondo de esta Vista de contenido, cambia el fondo de la celda.

¡Algo para añadir a la respuesta de @Leandro Alves, por lo que no tenemos que arrastrar UIViews extra a nuestro proyecto!

+0

Esto no cambiará el color de fondo seleccionado. – phatmann

Cuestiones relacionadas