2010-10-08 8 views
5

Estoy tratando de escribir código para modificar el color de fondo de una celda en función de su posición en la tabla. Mientras que el siguiente código 'funciona', solo afecta a las celdas que se le pasan. Las celdas vacías no se verán afectadas.¿Cómo modifico el color de fondo de un objeto UITableViewCell vacío en función de su posición?

- (void)tableView: (UITableView*)tableView willDisplayCell: (UITableViewCell*)cell forRowAtIndexPath: (NSIndexPath*)indexPath 
{ 
    if(!indexPath.row%2) 
    { 
     cell.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] ; 
     NSLog(@"Blue"); 
    } 
    else{ 
     cell.backgroundColor = [UIColor whiteColor]; 
     NSLog(@"white"); 
    } 
    cell.textLabel.backgroundColor = [UIColor clearColor]; 
    cell.detailTextLabel.backgroundColor = [UIColor clearColor]; 
} 

¿Cómo puedo efectuar el resto de las células que se muestran, si está vacío, cuando hay pocos elementos de la lista?

Por celdas 'vacías', me refiero a las celdas de marcador de posición que se muestran cuando la fuente de datos no tiene suficientes datos para completar toda la vista dada a la vista de tabla. Por ejemplo, si puede caber 10 celdas, pero solo tiene 5 valiosos datos, solo se le entregarán 5 celdas para que trabaje; las 5 siguientes están vacías y, por lo que puedo decir, son inaccesibles.

+0

, por lo que desea que las celdas de la tabla alternen entre azul y blanco, independientemente de si hay datos en las celdas o si están vacíos. – Nabou

+0

@Nabou Sí, eso era lo que deseaba, había una vez. Sin embargo, en realidad me mudé en los años intermedios entre ahora y entonces. Este problema es puramente teórico en este punto. La aplicación 'murió' hace mucho tiempo (y lo hizo toda la compañía que la desarrolló) – RonLugge

Respuesta

0

Debe implementar

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

en su delegado e inicializar las células como desee.

+0

Desafortunadamente, eso no parece funcionar. Agregando el código: cell.backgroundColor = [UIColor colorWithRed: 1.0 verde: 0.0 azul: 0.0 alfa: 1.0]; no hace nada para cambiar ninguna de las celdas, todas salen del color blanco gris predeterminado. – RonLugge

2

Supongo que quiere cambiar el fondo solo de celdas "vacías" ... Luego puede cambiar backgroundColor en InterfaceBuilder de UITableView. Pero afectará a todas las celdas vacías.

También puede cambiar el tipo de separador.

También, echar un vistazo aquí: http://www.zenbrains.com/blog/en/2010/06/color-de-fondo-de-celdas-vacias/

EDIT:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // 7 depends on how many cell is shown 
    return ([source count] <= 7) ? 7 : [source count]; 
} 

Desde: Show blank UITableViewCells in custom UITableView

+0

Quiero aplicar todas las celdas: deseo que todas las celdas se muestren para rebotar entre los dos colores indicados.Por desgracia, el enlace que muestra no proporciona una fuente útil; si intento establecer el color de fondo de contentView, no cambia el color de la celda de manera adecuada. Hay una 'tira' de color sin cambios a la derecha. Y cambiarlo así que estoy cambiando selectedBackgroundView, o simplemente backgroundView, tampoco hace nada. – RonLugge

+0

Edito mi respuesta: necesita agregar usted mismo celdas adicionales, y ahora en cellForRowAtIndexPath todas las celdas serán personalizables. –

+1

El problema es que no tengo esas celdas adicionales (en términos de los datos de origen), lo que causa otros resultados no deseados. – RonLugge

1

Debería funcionar si la propiedad backgroundColor de contentView de la celda se establece, no el backgroundColor de la celda:

cell.contentView.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] ; 
+0

He editado la pregunta para aclarar el punto. (Aunque estoy sorprendido de que esto haya sido desenterrado dos años después ...) – RonLugge

0

tratar de añadir la siguiente línea

[[cell contentView] setBackgroundColor:[UIColor colorWithRed:0 green:128/255.f blue:0 alpha:1]]; 

en el método

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

con la misma lógica que utilizó en el método willDisplayCell

como se sugiere aquí: http://www.zenbrains.com/blog/en/2010/06/color-de-fondo-de-celdas-vacias/

* Tenga en cuenta que cambiamos el color de fondo para [cell contentView]

+0

Lea la pregunta con más detalle. No se trata de establecer el color de fondo de la tabla, quería alternar el color de las celdas reales, incluidas las vacías. – RonLugge

Cuestiones relacionadas