如何创建一个表查看消息显示tableview是否为空?

时间:2017-05-31 16:42:23

标签: swift uitableview tableview

我正在构建一个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协议,但我对协议和委托的了解并不充分。

我希望我能够走上正轨。为了澄清我可以用上面提到的方式做到这一点,但我试图覆盖功能,以制作一个智能解决方案,我不会重复自己。

1 个答案:

答案 0 :(得分:0)

有一个非常好的图书馆:

https://github.com/dzenbot/DZNEmptyDataSet

这可以用于所有类型的容器,如UITableView,UICollectionView等。

符合某些DZNEmptyDataSetSourceDZNEmptyDataSetDelegate后,您可以简单地实现这些功能:

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)
    }

除此之外,您还可以添加一个按钮来执行某些操作。有关更多功能,请参阅库。