2016-04-06 2 views
3

In einer Tabellenansicht, zeige ich "Keine Ergebnisse gefunden", wenn keine von Suchsteuerung zurückgegebenen Ergebnisse durch eine andere Bedingung als unten- ZugabeWie wird in UITableView "Keine Ergebnisse gefunden" angezeigt, wenn kein Suchergebnis zurückgegeben wird?

In numberOfRowsInSection:

else if self.searchController.active && self.searchController.searchBar.text?.characters.count > 0 && 
     self.filteredLanguages.count == 0 { 
     return 1 
} 

In cellForRowAtIndexPath:

else if self.searchController.active && self.searchController.searchBar.text?.characters.count > 0 && 
     self.filteredLanguages.count == 0 { 
     cell.textLabel?.text = "No results found" 
     cellImage = nil 
     cell.userInteractionEnabled = false 
     isNoResultCell = true 
} 

if filteredIndexPath!.row == userSettings.valueForKey("selectedRow") as? Int && !isNoResultCell { 
     cell.tintColor = UIColor.whiteColor() 
     cell.accessoryType = UITableViewCellAccessoryType.Checkmark 
     lastSelectedRow = filteredIndexPath 
} 

Ich habe einige Untersuchungen über Ansätze zu zeigen "Keine Ergebnisse gefunden" in der Tabellenansicht, aber das nach dem Schreiben über Logik.

Und als einige Beiträge, kann ich eine UILabel als Unteransicht in der Hintergrundansicht der Tabelle in numberOfSectionsInTableView, wenn es keine Suchergebnisse und entfernen Sie die Unteransicht, wenn Suchergebnisse zurückgegeben werden.

Meine Frage ist - Welches ist die Ressource/Leistung versierte Option?

+1

Ich denke, Sie sollten ein verstecktes Label in Ihrer Ansicht haben und zeigen, wenn Sie keine Sache zu dieser Zeit gefunden haben, verstecken Tabelle –

+1

Es gibt viele Möglichkeiten, dies ohne Subview zu tun. Unter Verwendung von Abschnitt, TableHeaderView, SectionHeaderView und etc. Ihre Leistung ist fast gleich. – Satachito

+0

@ PKT - Danke !! Aber können Sie vorschlagen, ob die Logik, die ich geschrieben habe (wie oben, es löst den Zweck) ist gut mit Performance/Ressourcenverbrauch Perspektive? – CuriousDev

Antwort

2

Sie benötigen einen UILabel zu nehmen, das versteckt wird, wenn Ihre Tableview Datensätze (das heißt Array Datensätze aufweist, die in Tableview gezeigt werden wird).

Wenn Sie einen Datensatz suchen und keine Datensätze erhalten, können Sie die Tabellenansicht ausblenden und das Label mit dem Text "Keine Ergebnisse gefunden" anzeigen.

+0

Danke! dieser ist der einfachste von allen. Ich habe es getan, indem ich ein UILabel-Objekt aus dem Objektinspektor zum Storyboard hinzugefügt und eine IBOutlet-Verbindung erstellt habe. Das Problem ist, ich kann nicht in der Mitte der Tabellenansicht mit Einschränkungen platzieren. Es wird automatisch gezwungen, es unterhalb der Prototypzelle zu platzieren. – CuriousDev

+0

Fügen Sie ein Label in der Hauptansicht hinzu und fügen Sie centerX, centerY, height und width constraints dafür hinzu ... standardmäßig ist es in hidden ... wenn der Benutzer einen Datensatz durchsucht und wenn dieser nicht gefunden wird, wird nur Label angezeigt. .das ist es. –

+0

meinst du die Plazierung der Beschriftung in der Tabellenansicht über der Prototyp-Zelle und das Hinzufügen von Integritätsbedingungen oder das Setzen der Position des Label-Frames programmgesteuert? Ich sehe immer noch keine Option, um es im Storyboard/Attribut-Inspector auszurichten. Tut mir leid, ich bin neu in iOS Dev, also ziemlich unwissend dies zu tun. – CuriousDev

3

versuchen diese

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    NSInteger numOfSections = 0; 
    if (youHaveData) 
    { 
     self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; 
     numOfSections     = 1; 
     yourTableView.backgroundView = nil; 
    } 
    else 
    { 
     UILabel *noDataLabel   = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, yourTableView.bounds.size.width, yourTableView.bounds.size.height)]; 
     noDataLabel.text    = @"No data available"; 
     noDataLabel.textColor  = [UIColor blackColor]; 
     noDataLabel.textAlignment = NSTextAlignmentCenter; 
     yourTableView.backgroundView = noDataLabel; 
     yourTableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
    } 

    return numOfSections; 
} 
+0

Es funktioniert, aber die Einstellung tableView.backgroundView = nil oder label entfernt die unscharfe Ansicht, die ich für den TableView-Hintergrund einstelle. – CuriousDev

0

Ich kann Ihnen sicherlich diese großartige Bibliothek empfehlen, https://github.com/dzenbot/DZNEmptyDataSet es wird im Auftrag auf Sie arbeiten. Und Sie können einfach einen Platzhalter entweder normale Zeichenfolge oder eine attributierte Zeichenfolge oder ein Bild anstelle von UICollectionView oder UITableView festlegen.

Wenn Sie die Daten haben, laden Sie einfach Ihr Objekt und es wird diese Platzhalter-Sache ausblenden.

Verwendung:

In viewDidLoad:

self.tableView.emptyDataSetSource = self; 
self.tableView.emptyDataSetDelegate = self; 

Implementieren Delegierten folgende:

- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView 
{ 
    NSString *text = @"No results found."; 

    NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:18.0f], NSForegroundColorAttributeName: [UIColor darkGrayColor]}; 

    return [[NSAttributedString alloc] initWithString:text attributes:attributes]; 
} 

Für weitere Informationen und Verwendung bitte Link oben sehen.

Oh ja, um es innerhalb Swift Projekt zu verwenden: How to call Objective-C code from Swift.

+0

Danke !! Ich muss es versuchen. Zuerst probiere ich einfachste Lösungen aus. Dies wäre sehr hilfreich für meine anderen Apps. Die aktuelle App in der Diskussion ist einfacher. – CuriousDev

0

Platzieren Sie ein UILabel hinter dem Tisch. Wenn die Anzahl der Tabellen 0 ist, machen Sie die Tabelle "isHidden" = true. Dadurch wird die Tabelle ausgeblendet und Sie sehen dann die darunter liegende Ebene. Das UI-Label wird angezeigt, da es sich direkt unter der Tabellenansicht befindet.

Verwandte Themen