当 iPad 上的 reloadData 从非零部分变为零部分时,UITableViewController 似乎没有刷新
UITableViewController doesn't seem to refresh when reloadData goes from non-zero to zero sections on iPad
在 iPad 上,在 UISplitViewController 中,我在右侧部分有一个 UITableViewController,显示左侧 selected 内容的详细信息。因此,当我 deselect 左侧的所有内容,从而在详细视图中将详细信息对象设置为 nil 时,我希望 table 清除并显示一条消息以邀请用户 select一个元素。
这就是为什么我的详细信息如下 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 并且 returns 0。但是由于某种原因,[=22= 的所有 UI ] 未清除。我的行和部分仍然与参考 selected 时相同。我错过了什么吗?这是 Cocoa Touch 中的潜在错误吗?
我明白了。问题不在我的详细视图控制器中,而是在主视图控制器中。我没有考虑到当我在主项目中选择一个项目时显示详细视图控制器时,拆分视图控制器每次都会创建详细视图控制器的另一个实例。由于我在旧实例上设置了详细信息对象,所以旧实例已更新,但另一个实例已经显示。为了解决我的问题,我所要做的就是确保我总是在细节视图控制器的当前实例上设置我的细节对象。
我希望这对某人有用。
在 iPad 上,在 UISplitViewController 中,我在右侧部分有一个 UITableViewController,显示左侧 selected 内容的详细信息。因此,当我 deselect 左侧的所有内容,从而在详细视图中将详细信息对象设置为 nil 时,我希望 table 清除并显示一条消息以邀请用户 select一个元素。
这就是为什么我的详细信息如下 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 并且 returns 0。但是由于某种原因,[=22= 的所有 UI ] 未清除。我的行和部分仍然与参考 selected 时相同。我错过了什么吗?这是 Cocoa Touch 中的潜在错误吗?
我明白了。问题不在我的详细视图控制器中,而是在主视图控制器中。我没有考虑到当我在主项目中选择一个项目时显示详细视图控制器时,拆分视图控制器每次都会创建详细视图控制器的另一个实例。由于我在旧实例上设置了详细信息对象,所以旧实例已更新,但另一个实例已经显示。为了解决我的问题,我所要做的就是确保我总是在细节视图控制器的当前实例上设置我的细节对象。
我希望这对某人有用。