Ich habe eine tableview
, bei der manchmal keine Ergebnisse aufgelistet werden können. Daher möchte ich etwas aufstellen, das "keine Ergebnisse" sagt, wenn keine Ergebnisse vorliegen (entweder eine Beschriftung oder eine Tabellenansichtszelle?).
Gibt es einen einfachsten Weg, dies zu tun?
Ich würde einen Versuch label
hinter dem tableview
dann versteckt eines der auf der Grundlage der Ergebnisse zwei, aber da ich mit einem gerade arbeitete TableViewController
und keine normal ViewController
Ich bin nicht sicher , wie klug oder machbar , was ist.
Ich benutze Parse
und unterklassifiziere auch als PFQueryTableViewController
:
@interface TableViewController : PFQueryTableViewController
Ich kann zusätzliche Details angeben, lassen Sie es mich einfach wissen!
TableViewController
Szene im Storyboard:
EDIT: Per Midhun MP, hier ist der Code, den ich benutze
- (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;
}
Und hier ist die Ansicht, die ich bekomme, sie hat immer noch Trennlinien. Ich habe das Gefühl, dass dies eine kleine Änderung ist, bin mir aber nicht sicher, warum Trennlinien angezeigt werden.
numberOfSections
sollte eine Zählung zurückgeben und das ist es. Gleiches gilt fürnumberOfRowsInSection
. Diese können jederzeit mehrmals aufgerufen werden. Aktualisieren Sie niemals Ansichten oder Daten oder tun Sie nichts anderes, als eine Zählung zurückzugeben. Die Logik zum Aktualisieren von Ansichten darf niemals in diesen Methoden enthalten sein.Antworten:
Sie können dies leicht erreichen, indem Sie die
backgroundView
Eigenschaft von verwendenUITableView
.Ziel c:
Schnell:
Referenz UITableView-Klassenreferenz
quelle
tableView
Steckdose brauche, damit ich das tun kannyourTableView.backgroundView
? Ich benutze eine,TableViewController
deshalb habe ich momentan keine Steckdose dafür, deshalb frage ich mich.UITableViewController
hat bereits eine Eigenschaft mit dem Namen,tableView
so dass Sie keine erstellen müssenself.tableView
numberOfSections
sollte eine Zählung zurückgeben und das ist es. Gleiches gilt fürnumberOfRowsInSection
. Diese können jederzeit mehrmals aufgerufen werden. Aktualisieren Sie niemals Ansichten oder Daten oder tun Sie nichts anderes, als eine Zählung zurückzugeben. Die Logik zum Aktualisieren von Ansichten darf niemals in diesen Methoden enthalten sein.Für Xcode 8.3.2 - Swift 3.1
Hier ist eine nicht so bekannte, aber unglaublich einfache Möglichkeit, einer leeren Tabellenansicht, die auf Xcode 7 zurückgeht, eine Ansicht "Keine Elemente" hinzuzufügen. Ich überlasse es Ihnen, die Logik zu steuern, mit der das hinzugefügt / entfernt wird Ansicht zur Hintergrundansicht der Tabelle, aber hier ist der Ablauf für und das Xcode (8.3.2) -Storyboard:
Letztendlich funktioniert dies immer dann, wenn Sie Ihrem Ansichts-Controller eine einfache Ansicht hinzufügen möchten, die nicht unbedingt sofort angezeigt werden soll, sondern auch keinen Code übergeben soll.
quelle
Schnelle Version des obigen Codes: -
Wenn Sie jedoch Informationen aus einem JSON laden, müssen Sie überprüfen, ob der JSON leer ist oder nicht. Wenn Sie also Code wie diesen eingeben, wird zunächst die Meldung "Keine Daten" angezeigt und verschwindet dann. Denn nach dem erneuten Laden der Daten in der Tabelle wird die Nachricht ausgeblendet. Sie können diesen Code also dort einfügen, wo JSON-Daten in ein Array geladen werden. SO :-
quelle
self.tableView.reloadData()
aufgerufen werden? Ich habe festgestellt, dass meine neuen Zeilen hinzugefügt werden, aber die werdennoDataLabel
immer noch darunter angezeigt.self.tableView.backgroundView = nil
in meiner if-Anweisung vorreturn jobs_list.count
funktioniert gut. dankenumberOfSections
sollte eine Zählung zurückgeben und das ist es. Gleiches gilt fürnumberOfRowsInSection
. Diese können jederzeit mehrmals aufgerufen werden. Aktualisieren Sie niemals Ansichten oder Daten oder tun Sie nichts anderes, als eine Zählung zurückzugeben. Die Logik zum Aktualisieren von Ansichten darf niemals in diesen Methoden enthalten sein.Sie können dieses Steuerelement ausprobieren. Es ist ziemlich ordentlich. DZNEmptyDataSet
Oder wenn ich du wäre, würde ich nur tun
Kinderleicht
quelle
Swift 3 (aktualisiert):
quelle
numberOfSections
sollte eine Zählung zurückgeben und das ist es. Gleiches gilt fürnumberOfRowsInSection
. Diese können jederzeit mehrmals aufgerufen werden. Aktualisieren Sie niemals Ansichten oder Daten oder tun Sie nichts anderes, als eine Zählung zurückzugeben. Die Logik zum Aktualisieren von Ansichten darf niemals in diesen Methoden enthalten sein.Swift3.0
Ich hoffe, es dient Ihrem Zweck ...... In Ihrem UITableViewController.
Helferklasse mit Funktion:
quelle
numberOfSections
sollte eine Zählung zurückgeben und das ist es. Gleiches gilt fürnumberOfRowsInSection
. Diese können jederzeit mehrmals aufgerufen werden. Aktualisieren Sie niemals Ansichten oder Daten oder tun Sie nichts anderes, als eine Zählung zurückzugeben. Die Logik zum Aktualisieren von Ansichten darf niemals in diesen Methoden enthalten sein.Ich denke, der eleganteste Weg, um Ihr Problem zu lösen, ist der Wechsel von a
UITableViewController
zu aUIViewController
, der a enthältUITableView
. Auf diese Weise können Sie beliebigeUIView
Unteransichten der Hauptansicht hinzufügen .Ich würde nicht empfehlen, eine UITableViewCell zu verwenden, um dies zu tun. Möglicherweise müssen Sie in Zukunft zusätzliche Dinge hinzufügen, und die Dinge können schnell hässlich werden.
Sie können auch so etwas tun, aber dies ist auch nicht die beste Lösung.
quelle
UIViewController
enthält , das a enthältUITableView
.UITableViewController
, weil es nicht viel einfacher ist, es anders zu machen, als es andersherum zu tun, aber es schränkt Ihre Fähigkeit ein, Dinge in Zukunft zu ändern.Verwenden Sie diesen Code in Ihrer
numberOfSectionsInTableView
Methode: -quelle
numberOfSections
sollte eine Zählung zurückgeben und das ist es. Gleiches gilt fürnumberOfRowsInSection
. Diese können jederzeit mehrmals aufgerufen werden. Aktualisieren Sie niemals Ansichten oder Daten oder tun Sie nichts anderes, als eine Zählung zurückzugeben. Die Logik zum Aktualisieren von Ansichten darf niemals in diesen Methoden enthalten sein.SWIFT 3
quelle
Wenn Sie die Tabellenansichtsfußzeile nicht verwenden und nicht möchten, dass die Tabellenansicht den Bildschirm mit leeren Standardtabellenzellen ausfüllt, würde ich vorschlagen, dass Sie Ihre Tabellenansichtsfußzeile auf eine leere UIView setzen. Ich kenne nicht die richtige Syntax dafür in obj-c oder Swift, aber in Xamarin.iOS würde ich es so machen:
Der obige Code führt zu einer Tabellenansicht ohne die leeren Zellen
quelle
Hier ist die Lösung, die für mich funktioniert hat.
Fügen Sie einer neuen Datei den folgenden Code hinzu.
Ändern Sie Ihre Tabellenklasse aus Storyboard oder .xib in die benutzerdefinierte Klasse "MyTableView"
(Dies funktioniert nur für den ersten Abschnitt. Wenn Sie weitere Anpassungen vornehmen möchten, nehmen Sie Änderungen an der Funktion MyTableView reloadData () für andere Abschnitte entsprechend vor.)
quelle
@IBInspectable var emptyStateText: String?
diese Klasse hinzu und markieren@IBDesignable
Sie sie, da Sie dann verschiedene leere Statustexte für verschiedene Szenen in Storyboard oder Xibs ändern können. Genießen! :)Ich würde eine Überlagerungsansicht präsentieren, die das gewünschte Aussehen und die gewünschte Nachricht hat, wenn die Tabellenansicht keine Ergebnisse liefert. Sie können dies in ViewDidAppear tun, damit Sie die Ergebnisse erhalten, bevor Sie die Ansicht anzeigen / nicht anzeigen.
quelle
Wenn Sie dies ohne Code tun möchten, versuchen Sie dies!
Klicken Sie auf Ihre tableView.
Ändern Sie den Stil von "normal" in "gruppiert".
Jetzt, wenn Sie verwenden ....
tableView.backgroundView = EINFÜGEN IHRES ETIKETTES ODER IHRER ANSICHT
Die Trennzeichen werden nicht angezeigt!
quelle
Fügen Sie diesen Code in eine Datei ein und ändern Sie Ihren Sammlungstyp in CustomCollectionView
quelle