2009-09-29 7 views
10

Estoy cargando un contenido en UITableView de forma dinámica. Si hay datos, la tabla necesita mostrar los datos. Si no hay datos, la tabla debe mostrar una página simple. Pero en mi aplicación, la tabla muestra la página simple con dos líneas separadoras. Necesito eliminar esta línea de separación y mostrar una página blanca. ¿Por favor recomiende?cómo mostrar una tabla con cero filas en UITableView

¡Cualquier ayuda sería apreciada!

+0

es así de fácil ... [self.tableView setTableFooterView: [UIView new]]; – Fattie

+0

¡Tenga en cuenta que la solución real es ** simplemente configurarla como una tabla de estilo "agrupada" **! Para hacer eso, simplemente diríjase a la respuesta de Thomas Decaux aquí: http://stackoverflow.com/questions/1006663/how-can-i-set-a-uitableview-to-grouped-style – Fattie

Respuesta

2

Puede verificar el caso vacío si su fuente de datos está vacía agregar una vista de marcador de posición en la parte superior de la tabla. Si no están vacíos, elimine la vista del marcador de posición.

+0

Suena como un feo hack para mí , y los hacks feos tienden a romper la funcionalidad real en el futuro. – PeyloW

+0

Creo que debe haber "algo" para explicar al usuario que la aplicación está funcionando según lo planeado, no se colgó, ya terminó lo que estaba haciendo y, lo que es más importante, este espacio está vacío a propósito, pero solo para ahora. – JOM

+0

No veo por qué este es un hack feo, es solo una forma de mostrar una vista personalizada mientras no hay datos. La vista personalizada puede explicar por qué no hay datos y cómo el usuario puede ingresar datos. Es una práctica común en aplicaciones de iPhone (y Mac). – klaaspieter

2

Un plano UITableView siempre mostrará las líneas de separación, incluso si está vacío. Es posible que observe que si tiene una lista con solo una o dos filas, todavía hay líneas de separación visibles. Este es el comportamiento predeterminado y no debe anularse a menos que tenga una buena razón para realmente.

Supongo que verá solo dos líneas de separación porque sus filas son muy altas.

Si lo hace realmente necesidad de quitar la líneas de separación a continuación, establezca la propiedad separatorStyle en su vista de tabla a UITableViewCellSeparatorStyleNone. Tenga en cuenta que esto afectará a todas las filas. Por lo tanto, si aún desea separadores para las filas que sí existen, debe dibujar estas líneas de separación en sus propios objetos UITableViewCell.

26

Si proporciona una vista al pie de página, los separadores entre las filas vacías desaparecerán.

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)]; 
myTableView.tableFooterView = view; 
+0

Una gran sugerencia: funciona bien para mí en iOS 5. ¡Gracias! –

+1

Tenga en cuenta que 'tableFooterView' es una propiedad retenida, por lo que' view' se debe (auto) liberar. –

+0

Funciona a la perfección. No podría ser más simple. – n13

0

Dos pasos:

añadir este código en viewDidLoad

- (void)viewDidLoad 
{ 
    emptyplaceholder = [[UILabel alloc] initWithFrame:CGRectMake(80, 100, 640, 100)]; 
    emptyplaceholder.text = NSLocalizedString(@"No shift changes...", "no shift changes"); 
    emptyplaceholder.alpha = 0.2; 

    [self.view addSubview:emptyplaceholder]; 

} 

añadir este código en controllerDidChangeContent:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { 
    // The fetch controller has sent all current change notifications, so tell the table view to process all updates. 

    if (self.fetchedResultsController.fetchedObjects.count > 0) 
     emptyplaceholder.hidden = YES; 
    else 
     emptyplaceholder.hidden = NO; 

    [self.tableView endUpdates]; 
} 

por lo que el UILable desaparecerán cuando tenga celda de fecha, cuando eliminar a ningún dato en la tabla, la etiqueta volverá a aparecer.

+0

Lo siento, mi modelo es un controlador tableView con la misma información de fecha. por lo que las palabras deben ser: cuando el marcador de posición UILabel se ocultará cuando la vista de tabla tenga una celda de vista de tabla "real". –

1

Se puede simplificarse a una sola línea, utilizando @bbarnhart solución:

myTableView.tableFooterView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease]; 
0

El buen diseño de interfaz de usuario para añadir un nuevo UIView a la UIViewController cuando no hay datos "No hay datos disponibles", añadiendo ocultará líneas separadoras de UITableView

Cuestiones relacionadas