当 UITableView 为空时显示图像

Display image when UITableView is empty

我试图在我的 UITableView 为空时显示图像,但由于某些原因,当 tableView 为空时代码不会 运行,但在有单元格时没问题:

// Configures cell
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject!) -> (PFTableViewCell!) {
    let cell = tableView.dequeueReusableCellWithIdentifier("upcomingCell", forIndexPath: indexPath) as! UpcomingTVCell
    cell.configureCell(object)

    //makes it so the separators won't dissapear on us
    self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None
    self.tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine

    if (self.objects?.count == nil) {
        println("test")
        UIGraphicsBeginImageContext(self.view.frame.size);
        UIImage(named: "homeZero")?.drawInRect(self.view.bounds)
        var backImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext();
        self.tableView.backgroundColor = UIColor(patternImage: backImage)

        } else {
        self.tableView.backgroundColor = UIColor.whiteColor()
        println("this other code ran")

    }

    return cell
}

我试过self.objects?.count == 0,我试过使用numberOfRowsInSection,我试过visibleCells

我错过了什么?

如果数据源中没有对象,则不会调用上面的函数。因此,您需要找到另一个地方来做。如果你的数据源是静态的(没有删除或添加操作),我建议检查 viewDidLoad 中的数据源是否为空。如果可以更改数据源,那么我建议在从数据源中删除对象的函数中进行更改。每次删除对象时,都会检查数据源,如果它变空则显示图像。

在您的 numberOfRowsInSection 委托中检查 self.objects?.count 如果它等于 0(无数据)则 return 1 否则 return 计数作为行数你的 table。这将允许 cellForRowAtIndexPath 委托触发,即使在没有数据的情况下也可以显示您的图像。

我将 UITableView 子类化并稍作修改。如果某个部分不包含单元格,则 table 显示 placeholder 视图。

class PlaceholderTableView: UITableView {
    @IBOutlet var placeholder: UIView?
    @IBInspectable var emptiableSection:Int = 0


    override func reloadData() {
        super.reloadData()
        let count = self.numberOfRowsInSection(emptiableSection)
        self.placeholder?.hidden =  (count != 0)
    }


}