J'ai un tableview
, où parfois il n'y a pas de résultats à lister, donc je voudrais mettre quelque chose qui dit "pas de résultats" s'il n'y a pas de résultats (soit une étiquette ou une cellule de vue de tableau?).
Existe-t-il un moyen le plus simple de le faire?
J'essaierais un label
derrière tableview
puis cacherais l'un des deux en fonction des résultats, mais comme je travaille avec un TableViewController
et pas un normal, ViewController
je ne sais pas à quel point c'est intelligent ou faisable.
J'utilise également Parse
et je sous-classe en tant que PFQueryTableViewController
:
@interface TableViewController : PFQueryTableViewController
Je peux fournir tous les détails supplémentaires nécessaires, faites le moi savoir!
TableViewController
Scène dans Storyboard:
EDIT: Par Midhun MP, voici le code que j'utilise
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
NSInteger numOfSections = 0;
if ([self.stringArray count] > 0)
{
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
numOfSections = 1;
//yourTableView.backgroundView = nil;
self.tableView.backgroundView = nil;
}
else
{
UILabel *noDataLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.tableView.bounds.size.width, self.tableView.bounds.size.height)];
noDataLabel.text = @"No data available";
noDataLabel.textColor = [UIColor blackColor];
noDataLabel.textAlignment = NSTextAlignmentCenter;
//yourTableView.backgroundView = noDataLabel;
//yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.backgroundView = noDataLabel;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
return numOfSections;
}
Et voici la vue que j'obtiens, elle a toujours des lignes de séparation. J'ai le sentiment qu'il s'agit d'un petit changement, mais je ne sais pas pourquoi des lignes de séparation apparaissent?
numberOfSections
devrait retourner un compte et c'est tout. Pareil pournumberOfRowsInSection
. Ceux-ci peuvent être appelés plusieurs fois à tout moment. Ne mettez jamais à jour les vues, ne mettez jamais à jour les données et ne faites rien d'autre que renvoyer un décompte La logique de mise à jour des vues ne doit jamais être dans ces méthodes.Réponses:
Vous pouvez facilement y parvenir en utilisant la
backgroundView
propriété deUITableView
.Objectif c:
Rapide:
Référence Référence de classe UITableView
la source
tableView
prise pour pouvoir le faireyourTableView.backgroundView
? J'utilise unTableViewController
donc je n'ai pas de débouché pour le moment, c'est pourquoi je me demande.UITableViewController
a déjà une propriété nomméetableView
, vous n'avez donc pas besoin d'en créer uneself.tableView
numberOfSections
devrait retourner un compte et c'est tout. Pareil pournumberOfRowsInSection
. Ceux-ci peuvent être appelés plusieurs fois à tout moment. Ne mettez jamais à jour les vues, ne mettez jamais à jour les données et ne faites rien d'autre que renvoyer un décompte La logique de mise à jour des vues ne doit jamais être dans ces méthodes.Pour Xcode 8.3.2 - Swift 3.1
Voici un moyen pas si connu mais incroyablement simple d'ajouter une vue "Aucun élément" à une vue de table vide qui remonte à Xcode 7. Je vous laisse le contrôle de cette logique qui ajoute / supprime le vue de la vue d'arrière-plan de la table, mais voici le flux pour et le storyboard Xcode (8.3.2):
En fin de compte, cela fonctionne chaque fois que vous souhaitez ajouter une vue simple à votre contrôleur de vue que vous ne voulez pas nécessairement afficher immédiatement, mais que vous ne voulez pas non plus transmettre de code.
la source
Version Swift du code ci-dessus: -
Mais si vous chargez des informations à partir d'un JSON, vous devez vérifier si le JSON est vide ou non, par conséquent, si vous mettez un code comme celui-ci, il affiche initialement le message "Aucune donnée" puis disparaît. Parce qu'après le rechargement de la table, le message se cache. Vous pouvez donc placer ce code à l'endroit où charger les données JSON dans un tableau. ALORS :-
la source
self.tableView.reloadData()
sont appelées? J'ai constaté qu'il ajoutait mes nouvelles lignes, mais lenoDataLabel
est toujours affiché en dessous.self.tableView.backgroundView = nil
de ma déclaration if avantreturn jobs_list.count
fonctionne bien. mercinumberOfSections
devrait retourner un compte et c'est tout. Pareil pournumberOfRowsInSection
. Ceux-ci peuvent être appelés plusieurs fois à tout moment. Ne mettez jamais à jour les vues, ne mettez jamais à jour les données et ne faites rien d'autre que renvoyer un décompte La logique de mise à jour des vues ne doit jamais être dans ces méthodes.Vous pouvez essayer ce contrôle. C'est assez soigné. DZNEmptyDataSet
Ou si j'étais toi, tout ce que je ferais c'est
Peasy facile
la source
Swift 3 (mis à jour):
la source
numberOfSections
devrait retourner un compte et c'est tout. Pareil pournumberOfRowsInSection
. Ceux-ci peuvent être appelés plusieurs fois à tout moment. Ne mettez jamais à jour les vues, ne mettez jamais à jour les données et ne faites rien d'autre que renvoyer un décompte La logique de mise à jour des vues ne doit jamais être dans ces méthodes.Swift3.0
J'espère qu'il servira votre objectif ...... Dans votre UITableViewController.
Classe d'assistance avec fonction:
la source
numberOfSections
devrait retourner un compte et c'est tout. Pareil pournumberOfRowsInSection
. Ceux-ci peuvent être appelés plusieurs fois à tout moment. Ne mettez jamais à jour les vues, ne mettez jamais à jour les données et ne faites rien d'autre que renvoyer un décompte La logique de mise à jour des vues ne doit jamais être dans ces méthodes.Je pense que le moyen le plus élégant de résoudre votre problème est de passer d'
UITableViewController
unUIViewController
contenant unUITableView
. De cette façon, vous pouvez ajouter ce queUIView
vous voulez en tant que sous-vues de la vue principale.Je ne recommanderais pas d'utiliser un UITableViewCell pour ce faire, vous devrez peut-être ajouter des éléments supplémentaires à l'avenir et les choses peuvent rapidement devenir laides.
Vous pouvez également faire quelque chose comme ça, mais ce n'est pas non plus la meilleure solution.
la source
UIViewController
contenant unUITableView
.UITableViewController
moi - même, car l'utiliser n'est pas vraiment beaucoup plus facile que de le faire dans l'autre sens, mais cela limite votre capacité à changer les choses à l'avenir.Utilisez ce code dans votre
numberOfSectionsInTableView
méthode: -la source
numberOfSections
devrait retourner un compte et c'est tout. Pareil pournumberOfRowsInSection
. Ceux-ci peuvent être appelés plusieurs fois à tout moment. Ne mettez jamais à jour les vues, ne mettez jamais à jour les données et ne faites rien d'autre que renvoyer un décompte La logique de mise à jour des vues ne doit jamais être dans ces méthodes.SWIFT 3
la source
Si vous n'utilisez pas le pied de page tableview et que vous ne voulez pas que la tableview remplisse l'écran avec des cellules de tableau par défaut vides, je vous suggère de définir votre pied de page tableview sur un UIView vide. Je ne connais pas la syntaxe correcte pour faire cela dans obj-c ou Swift, mais dans Xamarin.iOS, je le ferais comme ceci:
Le code ci-dessus entraînera une vue de table sans les cellules vides
la source
Voici la solution qui a fonctionné pour moi.
Ajoutez le code suivant à un nouveau fichier.
Remplacez votre classe de table par la classe personnalisée "MyTableView" à partir du storyboard ou du .xib
(cela ne fonctionnera que pour la première section. Si vous souhaitez personnaliser davantage, apportez les modifications nécessaires à la fonction reloadData () MyTableView pour les autres sections)
la source
@IBInspectable var emptyStateText: String?
et marquez cette classe comme@IBDesignable
vous pourrez alors changer le texte d'état vide différent pour différentes scènes dans le storyboard ou les xibs. Prendre plaisir! :)Je présenterais une vue de superposition qui a l'apparence et le message que vous voulez si la vue de la table n'a pas de résultats. Vous pouvez le faire dans ViewDidAppear, vous avez donc les résultats avant d'afficher / de ne pas afficher la vue.
la source
Si vous voulez faire cela sans aucun code, essayez ceci!
Cliquez sur votre tableView.
Changez le style de "simple" à "groupé".
Maintenant, lorsque vous utilisez ...
tableView.backgroundView = INSERER VOTRE ETIQUETTE OU VUE
Il ne montrera pas les séparateurs!
la source
Ajoutez ce code dans un fichier et changez votre type de collection en CustomCollectionView
la source