2009-09-29 16 views
10

Sto caricando dinamicamente un contenuto in UITableView. Se sono presenti dati, la tabella deve visualizzare i dati. Se non ci sono dati, la tabella dovrebbe mostrare una pagina semplice. Ma nella mia applicazione la tabella mostra la pagina semplice con due linee di separazione. ho bisogno di rimuovere questa linea di separazione e visualizzare una semplice pagina bianca. Si prega di suggerire?come visualizzare una tabella con zero righe in UITableView

Qualsiasi aiuto sarebbe apprezzato!

+0

è così semplice ... [self.tableView setTableFooterView: [UIView new]]; – Fattie

+0

Si noti che la soluzione effettiva è ** semplicemente per impostarla come tabella di stile "raggruppata" **! Per farlo, basta andare alla risposta di Thomas Decaux qui: http://stackoverflow.com/questions/1006663/how-can-i-set-a-uitableview-to-grouped-style – Fattie

risposta

2

È possibile verificare la presenza del caso vuoto se l'origine dati è vuota aggiungere una vista segnaposto sopra la vista tabella. Se non sono vuoti, rimuovi la vista segnaposto.

+0

Suona come un brutto scherzo per me e i brutti hack tendono a rompere le reali funzionalità lungo la strada. – PeyloW

+0

Credo viceversa: dovrebbe esserci "qualcosa" per spiegare all'utente che l'applicazione funziona come pianificato, non si è arrestata, ha già completato ciò che stava facendo e, cosa più importante, questo spazio è vuoto di proposito, ma solo per adesso. – JOM

+0

Non vedo perché questo è un brutto attacco, è solo un modo di visualizzare una vista personalizzata mentre non ci sono dati. La visualizzazione personalizzata può spiegare perché non ci sono dati e come l'utente può inserire i dati. È una pratica comune nelle applicazioni iPhone (e Mac). – klaaspieter

2

Un piano UITableView mostra sempre le linee di separazione anche se è vuoto. Potresti notare che se hai una lista con solo una o due righe, ci sono ancora linee di separazione visibili. Questo è il comportamento predefinito e non dovrebbe essere sovrascritto a meno che non si abbia una buona ragione per .

Immagino che tu veda solo due linee di separazione perché le tue file sono molto alte?

Se fai davvero bisogno di rimuovere le linee di separazione quindi impostare la proprietà separatorStyle sulla vostra vista tabella a UITableViewCellSeparatorStyleNone. Prendi nota che ciò influirà su tutte le righe. Quindi, se vuoi ancora separatori per le righe che esistono, allora devi disegnare queste linee di separazione nei tuoi oggetti UITableViewCell.

26

Se si fornisce una vista al piè di pagina, i separatori tra le righe vuote scompariranno.

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

Ottimo suggerimento - funziona bene per me su iOS 5. Grazie! –

+1

Si noti che 'tableFooterView' è una proprietà mantenuta, quindi' view' dovrebbe essere (auto) rilasciato. –

+0

Funziona perfettamente. Non potrebbe essere più semplice – n13

0

due fasi:

aggiungere questo codice nella 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]; 

} 

aggiungere questo codice in 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]; 
} 

in modo che l'UILable scompaiono quando hanno cella della data, quando cancella su nessun dato nella tabella, l'etichetta verrà mostrata di nuovo.

+0

Spiacente, il mio modello è un controller tableView con le stesse informazioni sulla data. quindi le parole devono essere: quando il segnaposto UILabel si nasconde quando la vista tabella ha una cella di visualizzazione tabella "reale". –

1

Può essere semplificata in una singola linea, utilizzando @bbarnhart soluzione:

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

La buona UI Design per aggiungere un nuovo UIView al UIViewController quando non ci sono dati "Non sono disponibili dati", con l'aggiunta di nasconderà le linee di separazione di UITableView

Problemi correlati