2009-09-29 9 views
10

Je charge dynamiquement un contenu dans UITableView. S'il existe des données, la table doit afficher les données. S'il n'y a pas de données, la table devrait afficher une page vierge. Mais dans mon application, la table affiche la page simple avec deux lignes de séparation. J'ai besoin d'enlever cette ligne de séparation et d'afficher une page blanche. Veuillez suggérer?comment afficher une table avec zéro rangées dans UITableView

Toute aide serait appréciée!

+0

c'est aussi simple que ça ... [self.tableView setTableFooterView: [UIView new]]; – Fattie

+0

Notez que la solution actuelle est ** simplement pour la définir comme une table de style "groupée" **! Pour ce faire, il suffit d'aller à la réponse de Thomas Decaux ici: http://stackoverflow.com/questions/1006663/how-can-i-set-a-favorable-to-grouped-style – Fattie

Répondre

2

Vous pouvez vérifier le cas vide si votre source de données est vide ajouter une vue de l'espace réservé au-dessus de la tableview. S'ils ne sont pas vides, supprimez la vue de l'espace réservé.

+0

On dirait un hack moche pour moi , et les hacks laids ont tendance à briser la fonctionnalité réelle sur la route. – PeyloW

+0

Je crois que vice versa: il devrait y avoir "quelque chose" pour expliquer à l'utilisateur que l'application fonctionne comme prévu, elle ne s'est pas crashée, elle a déjà fini ce qu'elle faisait et - plus important - cet espace est volontairement vide, mais seulement à présent. – JOM

+0

Je ne vois pas pourquoi c'est un hack moche, c'est juste une façon d'afficher une vue personnalisée alors qu'il n'y a pas de données. La vue personnalisée peut expliquer pourquoi il n'y a pas de données et comment l'utilisateur peut entrer des données. C'est une pratique courante dans les applications iPhone (et Mac). – klaaspieter

2

Une ligne UITableView affichera toujours les lignes de séparation même si elle est vide. Vous pourriez remarquer que si vous avez une liste avec seulement une ou deux lignes, il reste des lignes de séparation visibles. C'est le comportement par défaut et ne devrait pas être remplacé à moins que vous ayez un vraiment bonne raison.

Je suppose que vous ne voyez que deux lignes de séparation parce que vos lignes sont très grandes?

Si vous vraiment besoin d'enlever les lignes de séparation puis définissez la propriété separatorStyle sur votre point de vue de la table à UITableViewCellSeparatorStyleNone. Prenez note que cela affectera toutes les lignes. Donc, si vous voulez toujours des séparateurs pour les lignes qui existent, vous devez dessiner ces lignes de séparation dans vos propres objets UITableViewCell.

26

Si vous fournissez une vue au pied de page, les séparateurs entre les lignes vides disparaissent.

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

Grande suggestion - fonctionne bien pour moi dans iOS 5. Merci! –

+1

Notez que 'tableFooterView' est une propriété conservée, donc' view' devrait être libéré (auto). –

+0

Fonctionne parfaitement. Ne pouvait pas être plus simple. – n13

0

Deux étapes:

ajouter ce code dans 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]; 

} 

ajouter ce code dans 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]; 
} 

de sorte que le UILable disparaîtra quand ont cellule de date, lorsque supprimer à aucune donnée dans la table, l'étiquette montrera à nouveau.

+0

Désolé, mon modèle est un contrôleur tableView avec les mêmes informations de date. si les mots doivent être: lorsque le détenteur de place UILabel sera caché lorsque la vue de table a "réel" cellule vue de la table. –

1

Il peut être simplifié à une seule ligne, en utilisant la solution @bbarnhart:

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

La bonne conception de l'interface pour ajouter une nouvelle UIView au UIViewController quand il n'y a pas de données « Aucune donnée disponible », en ajoutant il cachera les lignes séparatrices de l'UITableView

Questions connexes