2

我试图在我的 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

我错过了什么?

4

3 回答 3

1

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

于 2015-07-02T23:56:10.507 回答
0

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

于 2015-07-03T00:00:21.830 回答
0

我对子类UITableView稍作修改。如果部分不包含单元格,则表格显示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)
    }


}
于 2015-07-03T01:01:37.417 回答