2017-05-31 2 views
0

Ich baue eine TableView, die eine leere Nachricht anzeigt.Wie man eine Tabelle erstellt Mit der Nachricht anzeigen, wenn Tabellenansicht leer ist?

Ich verwende die wirklich hilfreiche Antworten auf diese Frage (Handling an empty UITableView. Print a friendly message) Das bin ich auf eine Funktion geführt hat:

func emptyMessage(message:String, viewController:UITableViewController) { 
     let VCSize = viewController.view.bounds.size 
     let messageLabel = UILabel(frame: CGRect(x:0, y:0, width:VCSize.width, height:VCSize.height)) 
     messageLabel.text = message 
     messageLabel.textColor = UIColor.black 
     messageLabel.numberOfLines = 0 
     messageLabel.textAlignment = .center; 
     messageLabel.font = UIFont(name: "Futura", size: 15) 
     messageLabel.sizeToFit() 
     viewController.tableView.backgroundView = messageLabel; 
     viewController.tableView.separatorStyle = .none; 
    } 

ich dies wie dies in jeder Tabellenansichten Datenquelle nennen könnte:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
if projects.count > 0 { 
    return 1 
} else { 
    TableViewHelper.EmptyMessage("You don't have any projects yet.\nYou can create up to 10.", viewController: self) 
    return 0 
} 
} 

was funktionieren würde. Allerdings würde ich das lieber nicht wiederholt implementieren müssen und stattdessen eine benutzerdefinierte Tabellenansicht mit einer Methode in der Datenquelle haben, die fragt, welche Nachricht Sie hinzufügen möchten.

Ich habe versucht, die TableView-Klasse zu erweitern oder eine Unterklasse von TableView zu machen, aber ich denke, das ist nicht die Lösung. Stattdessen denke ich, dass die Lösung darin besteht, das UITableViewDataSource-Protokoll zu überschreiben, aber mein Wissen über Protokolle und Delegation ist nicht ausreichend.

Ich hoffe ich bin damit auf dem richtigen Weg. Und um zu verdeutlichen, könnte ich es auf die oben erwähnte Weise tun, aber ich versuche, die Funktionalität außer Kraft zu setzen, um eine intelligente Lösung zu schaffen, bei der ich mich nicht wiederhole.

Antwort

0

Es gibt eine sehr gute Bibliothek:

https://github.com/dzenbot/DZNEmptyDataSet

Dieser für alle Arten von Behältern wie UITableView verwendet werden kann, UICollectionView usw.

Nach DZNEmptyDataSetSource, DZNEmptyDataSetDelegate bis zu einem gewissen konformen, können Sie einfach implementieren Sie diese Funktionen:

func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { 
     let str = "Empty Data." 
     let attrs = [NSFontAttributeName: UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline)] 
     return NSAttributedString(string: str, attributes: attrs) 
    } 

    func description(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? { 
     let str = "Any Details about empty data." 
     let attrs = [NSFontAttributeName: UIFont.preferredFont(forTextStyle: UIFontTextStyle.body)] 
     return NSAttributedString(string: str, attributes: attrs) 
    } 

Abgesehen davon können Sie einen Hintern hinzufügen um einige Aktionen durchzuführen. Weitere Informationen finden Sie in der Bibliothek.

+0

Wirklich zu schätzen, und ich habe in der Bibliothek und das würde funktionieren. Ich habe in der Frage nicht angegeben, also würdest du nicht wissen, aber der Grund, warum ich nicht mit einer Bibliothek gegangen bin, ist, dass ich die Theorie dahinter lernen wollte, wie ich das machen könnte. Ich werde versuchen, die Github-Dateien zu lesen und zu sehen, wie sie es tun. Vielen Dank! –

Verwandte Themen