2010-03-22 13 views
7

Tengo un UITableViewController que se completa con algunos datos. Si los datos vuelven vacíos, obviamente la tabla está vacía. ¿Cuál es el método apropiado para usar para manejar este caso y poner algo así como un UILabel con "Sin datos disponibles".Manejo de UITableView vacío en UITableViewController

He estado usando - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section pero está comprobado que es un poco engorroso y no estoy seguro de que sea el mejor lugar para hacerlo.

Respuesta

1

Acabo de ocultar la tabla cuando no había datos en su lugar. Basta con la subclase UITableView y anula reloadData. También puede mostrar u ocultar una etiqueta de texto de manera apropiada para mostrar que no hay datos disponibles.

- (void)reloadData { 
    [super reloadData]; 
    BOOL dataPresent = FALSE; 
    int sections = [self.dataSource respondsToSelector:@selector(numberOfSectionsInTableView:)] ? [self.dataSource numberOfSectionsInTableView:self] : 1; 
    for (int i = 0; i < sections; i++) { 
     if ([self.dataSource tableView:self numberOfRowsInSection:i] > 0) { 
      dataPresent = TRUE; 
      break; 
     } 
    } 
    self.hidden = !dataPresent; 
    return; 
} 
5

Probablemente revertiré la filosofía un poco para mostrar solo UITableView cuando el contenido esté disponible, y hacer que UIView muestre su imagen disponible 'sin contenido' hasta que el contenido esté listo.

Una vez que el contenido ha sido recuperado y está listo para ser presentado, anima o crea el UITableView en la jerarquía de vista sobre la imagen 'sin contenido' y pídele que vuelva a cargar sus datos. Esto hará que comience a funcionar a través de las devoluciones de llamadas de los delegados de origen de datos.

Al menos de esta manera no tendrá que preocuparse por mostrar una tabla vista sin datos, y mezclando preocupaciones con los métodos de devolución de llamada UITableViewDataSource.

+0

Me gusta eso. Así que comencé con la aplicación basada en navegación y terminé teniendo un UITableViewController. Entonces, si oculto TableView, ¿cómo agrego cosas a la vista y qué vista tiene debajo? Cuando abro InterfaceBuilder, solo veo la tabla. Me está confundiendo. – Ternary

1

¿Por qué no simplemente cambia la propiedad backgroundView de UITableView a algo apropiado cuando la tabla está vacía? Puede actualizar la propiedad backgroundView en cualquier momento que cargue o reloadData para su tableView. El backgroundView se dimensiona automáticamente según el tamaño de su tableView y puede personalizarlo para que tenga las imágenes, el texto y los controles que desee para el caso vacío.

Cuestiones relacionadas