一些 TableView 视图没有重新加载,因为我的 TableView Delegate 没有收到 tableView:viewFor:row: for every row
Some TableView views are not reloading, as my TableView Delegate is not receiving tableView:viewFor:row: for every row
我有一个TableView
,还有一个TableViewController
将TableView's
delegate
和datasource
设置为TableViewController
因此,当 table 开始绘制时,它会向代理请求视图,此代码运行:
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let result = tableView.make(withIdentifier: "flagView", owner: self) as? TableCellView
case "technicalFlag", "supplyFlag":
let button = result?.control as? NSButton {
button.state = value.boolValue ? NSOnState : NSOffState
}
}
正确更新按钮:
注意有 5 个技术风险标志
但是,当我按供应风险排序时,它调用 tableView.reloadData()
但是,不是每个视图都会重新加载吗?
因此,一些标志保持黑色,即使它们不应该(现在注意技术风险中的 8+ 个黑色标志)
哪些标志是黑色的似乎是随机的(当我通过上下文菜单通过另一个视图查看数据时,我可以分辨出哪些标志应该真正是黑色的)
从表面上看,这看起来像是一个重绘问题。我已经尝试了所有方法,但无法重绘这些视图。我错过了什么吗?
我已经确认 tableView:viewFor:row:
没有像我认为的那样多次被调用
我想,总而言之,我认为调用 reloadData()
会更新每行 x 列的每个视图?运行时如何决定哪些视图获得更新调用?
啊,解决了,我修改了原来的代码,因为我认为它与显示无关:
case "technicalRiskFlag", "supplyRisk":
if let value = node.value(forKeyPath: identifier) as? NSNumber,
let button = result?.control as? NSButton {
button.state = value.boolValue ? NSOnState : NSOffState
}
但事实证明 value
可能是 nil
,最终没有重新绘制标志。不确定为什么委托方法仍然没有被调用,但我将代码更改为:
if let button = result?.control as? NSButton {
if let value = node.value(forKeyPath: identifier) as? NSNumber {
button.state = value.boolValue ? NSOnState : NSOffState
} else {
button.state = NSOffState
}
}
现在完美运行
我有一个TableView
,还有一个TableViewController
将TableView's
delegate
和datasource
设置为TableViewController
因此,当 table 开始绘制时,它会向代理请求视图,此代码运行:
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let result = tableView.make(withIdentifier: "flagView", owner: self) as? TableCellView
case "technicalFlag", "supplyFlag":
let button = result?.control as? NSButton {
button.state = value.boolValue ? NSOnState : NSOffState
}
}
正确更新按钮:
注意有 5 个技术风险标志
但是,当我按供应风险排序时,它调用 tableView.reloadData()
但是,不是每个视图都会重新加载吗?
因此,一些标志保持黑色,即使它们不应该(现在注意技术风险中的 8+ 个黑色标志)
哪些标志是黑色的似乎是随机的(当我通过上下文菜单通过另一个视图查看数据时,我可以分辨出哪些标志应该真正是黑色的)
从表面上看,这看起来像是一个重绘问题。我已经尝试了所有方法,但无法重绘这些视图。我错过了什么吗?
我已经确认 tableView:viewFor:row:
没有像我认为的那样多次被调用
我想,总而言之,我认为调用 reloadData()
会更新每行 x 列的每个视图?运行时如何决定哪些视图获得更新调用?
啊,解决了,我修改了原来的代码,因为我认为它与显示无关:
case "technicalRiskFlag", "supplyRisk":
if let value = node.value(forKeyPath: identifier) as? NSNumber,
let button = result?.control as? NSButton {
button.state = value.boolValue ? NSOnState : NSOffState
}
但事实证明 value
可能是 nil
,最终没有重新绘制标志。不确定为什么委托方法仍然没有被调用,但我将代码更改为:
if let button = result?.control as? NSButton {
if let value = node.value(forKeyPath: identifier) as? NSNumber {
button.state = value.boolValue ? NSOnState : NSOffState
} else {
button.state = NSOffState
}
}
现在完美运行