我正在构建一个tableView,它在空时显示一条消息。
我在这个问题上使用了非常有用的答案(Handling an empty UITableView. Print a friendly message)这让我有了一个功能:
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;
}
我可以在每个表中查看数据源,如下所示:
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
}
}
哪个会奏效。但是,我宁愿不必重复实现它,而是在数据源中有一个自定义tableview和一个方法,询问您要添加哪个消息。
我尝试过扩展TableView类或创建tableView的子类,但我认为这不是解决方案。相反,我认为解决方案是覆盖UITableViewDataSource协议,但我对协议和委托的了解并不充分。
我希望我能够走上正轨。为了澄清我可以用上面提到的方式做到这一点,但我试图覆盖功能,以制作一个智能解决方案,我不会重复自己。
答案 0 :(得分:0)
有一个非常好的图书馆:
https://github.com/dzenbot/DZNEmptyDataSet
这可以用于所有类型的容器,如UITableView,UICollectionView等。
符合某些DZNEmptyDataSetSource
,DZNEmptyDataSetDelegate
后,您可以简单地实现这些功能:
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)
}
除此之外,您还可以添加一个按钮来执行某些操作。有关更多功能,请参阅库。