NSTableView 自定义行视图缓存
NSTableView Custom Row View Caching
我一直在使用 rowViewForRow 自定义我的 NSTableRowView,但这导致滚动时出现严重的性能问题,因为行会不断重绘。
我尝试将我的代码更新为仅在行不存在时才重绘,这提供了很多 faster/smoother 滚动,但有时某些视图现在显示错误的内容。
func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
let identifier = NSUserInterfaceItemIdentifier("MyTableRowView")
var rowView = tableView.makeView(withIdentifier: identifier, owner: self) as? MyTableRowView
// does the row exist?
if rowView == nil {
// create the row view
rowView = MyTableRowView(frame: NSRect.zero)
// set the identifier
rowView?.identifier = identifier
}
return rowView
}
非常感谢任何建议!
想通了。该功能运行良好,但我的自定义按钮视图之一需要 isChecked
上的 setNeedsDisplay
来更新显示。这以前一直有效,因为该行一直在重新绘制。
我一直在使用 rowViewForRow 自定义我的 NSTableRowView,但这导致滚动时出现严重的性能问题,因为行会不断重绘。
我尝试将我的代码更新为仅在行不存在时才重绘,这提供了很多 faster/smoother 滚动,但有时某些视图现在显示错误的内容。
func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
let identifier = NSUserInterfaceItemIdentifier("MyTableRowView")
var rowView = tableView.makeView(withIdentifier: identifier, owner: self) as? MyTableRowView
// does the row exist?
if rowView == nil {
// create the row view
rowView = MyTableRowView(frame: NSRect.zero)
// set the identifier
rowView?.identifier = identifier
}
return rowView
}
非常感谢任何建议!
想通了。该功能运行良好,但我的自定义按钮视图之一需要 isChecked
上的 setNeedsDisplay
来更新显示。这以前一直有效,因为该行一直在重新绘制。