2010-04-10 15 views
12

Estoy intentando personalizar una UITableView. Se ve bien hasta ahora. Pero cuando se utiliza una costumbre UITableViewCell subclase, no lo entiendo las celdas de la tabla en blanco cuando hay sólo 3 células:Mostrar UITableViewCells en blanco en UITableView personalizado

alt text http://img193.imageshack.us/img193/2450/picture1zh.png

utilizando el estilo TableView por defecto que puedo conseguir las filas en blanco que relanza para llenar la vista (por ejemplo, la aplicación de correo tiene esto). Traté de establecer un patrón backgroundColor en el UITableView con el mismo fondo del azulejo:

UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"score-cell-bg.png"]]; 
moneyTableView.backgroundColor = color; 

... pero el azulejo empieza un poco antes de la parte superior de la TableView, por lo que la placa está apagado una vez se llevan a cabo de la celda real que muestra:

alt text http://img707.imageshack.us/img707/8445/picture2jyo.png

¿Cómo puedo personalizar mi tableview pero aún así mantener las filas en blanco si hay menos filas de llenar una página?

+1

+1 Esta es una buena pregunta que está bien presentada. Ojalá todos, incluido yo mismo, tomáramos tanto tiempo para hacer una buena pregunta. – TechZen

+0

Estaba tratando de formular la misma pregunta y encontré dos enfoques diferentes. Como referencia para quienes vinieron aquí desde google, marque [esta otra respuesta] (http://stackoverflow.com/questions/14520185/ios-uitableview-displaying-empty-cells-at-the-end) que usa una costumbre vista de pie de página. –

Respuesta

9

¿Por casualidad eliminó el color de fondo y el estilo de separador? Si lo hiciste, podría ser por eso que no hay células adicionales. Creo que el UITableView por defecto no agrega más células realmente, solo tiene el estilo de separador para crear esa ilusión y porque tiene un fondo blanco, se parecen a las celdas.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
} 

Si ese no es el caso, siempre se puede intentar añadir células adicionales que no se pueden seleccionar:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return ([source count] <= 7) ? 7 : [source count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Set all labels to be blank 
    if([source count] <= 7 && indexPath.row > [source count]) { 
     cell.textLabel.text = @""; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } else { 
     cell.textLabel.text = [source objectAtIndex:indexPath.row]; 
     cell.selectionStyle = UITableViewCellSelectionStyleBlue; 
    } 

    return cell; 
} 
+0

"solo tiene el estilo de separador para crear esa ilusión" Tienes toda la razón. Por lo tanto, creo que solo voy a agregar el separador y convertir la imagen de fondo en dos columnas de color en lugar de tener el separador * en * la imagen de fondo ... typeoneerror

+0

¡Bien, eso funciona bastante bien! Todavía un poco de ajustes para hacer. http://img517.imageshack.us/img517/5091/picture3lt.png – typeoneerror

+1

no debería 'if ([fuente cuenta] <= 7 && indexPath.row> [fuente cuenta]) {' ser 'if ([fuente cuenta ] <= 7 && indexPath.row> ([fuente conteo] - 1)) {'como la ruta del índice comienza desde 0 mientras que el recuento comienza desde 1 – Alex

0

creo que el ligero desajuste de la fila superior es causado por el rebote de desplazamiento vertical de la mesa de trabajo. Si lo apagas, la fila superior debe alinearse correctamente.

Además, puede devolver una altura de celda que abarcará el mosaico en tableview:cellHeightForRow:. Eso funciona bien en las celdas predeterminadas.

Cuestiones relacionadas