当iPad上的reloadData从非零部分变为零部分时,UITableViewController似乎没有刷新

时间:2018-10-08 17:40:52

标签: ios swift uitableview ipad uisplitviewcontroller

在iPad上,在UISplitViewController中,我的右侧部分有一个UITableViewController,其中显示了左侧所选择内容的详细信息。因此,当我取消选择左侧的所有内容,从而在局部视图中将局部对象设置为nil时,我希望清除该表并显示一条消息,邀请用户选择一个元素。

这就是为什么我在详细的UITableViewController子类中具有以下内容的原因:

var reference: Reference? {
    didSet {
        self.refreshInterface()
    }
}

func refreshInterface() {
    if let titleLabel = self.titleLabel {
        if let ref = reference {
            titleLabel.text = ref.projectName
        } else {
            titleLabel.text = NSLocalizedString("Please select a reference", comment: "")
        }
    }
    tableView.reloadData()
}

override func numberOfSections(in tableView: UITableView) -> Int {
    if(self.reference != nil) {
        return 5
    } else {
        return 0
    }
}

然后我与调试器进行了检查,将引用设置为nil之后,将调用numberOfSections并返回0。但是由于某种原因,并未清除表的所有UI。我仍然拥有与选择引用相同的行和节。我想念什么吗?这是Cocoa Touch中的潜在错误吗?

1 个答案:

答案 0 :(得分:0)

我知道了。问题不在我的局部视图控制器中,而在主控制器中。我没有考虑到当在主项目中选择一个项目时显示详细视图控制器时,拆分视图控制器每次都会创建该详细视图控制器的另一个实例。由于我是在旧实例上设置详细信息对象,因此旧实例已更新,但已经显示了另一个实例。解决我所要做的就是确保始终在明细视图控制器的当前实例上设置明细对象。

我希望这对某人有用。