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 来更新显示。这以前一直有效,因为该行一直在重新绘制。