The documentation for the NSTableViewDataSource protocol说
This method is mandatory
如果您创建一个新的 NSTableViewDataSource,编译器会要求您提供此方法以及 numberOfRows(in tableView: NSTableView)
.
到目前为止,一切都很好。如果您提供它,它会立即为每一行调用一次......但是如果您删除它,该表似乎可以像没有它一样工作。基于 View 的表中似乎与此方法完全没有联系:在 NSTableViewDelegate 的 tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int)
中方法,我根据数据源的内容数组返回新 View ,如果我将一堆无意义的数据粘贴到objectValueFor: row
中(直到并包括返回相同的字符串 - 我的表对象不是字符串)没有任何效果,因为我正在 viewFor tableColumn:
中设置 NSTableViewCells 的值。
如果我通过直接从数据源检索相应的值(例如)来处理选择更改(以及我想对对象执行的任何操作)
func tableViewSelectionDidChange(_ notification: Notification) {
print(dataSource.allItems[tableView.selectedRow])
}
有什么理由要实现这个方法吗?我看不到该对象实际使用的任何点,感觉就像来自基于单元格的表格的人工制品。
我不想通过省略必要的方法来破坏我的代码,但由于我即将尝试使用自定义数据源进行一些奇怪而美妙的事情,我也不想使用以下方法使我的代码过于复杂被调用,但其结果似乎完全没有意义。
最佳答案
如果单元格 View 响应setObjectValue:
,则表格 View 调用该方法并传入从tableView获取的行的对象值(_:objectValueFor:row:)
.
NSTableCellView
确实响应该方法,并且是一个常见的单元格 View 类。 NSTextField
也是如此;它实际上继承自 NSControl
。
就您而言,您的单元格 View 没有 objectValue
属性,或者更有可能的是,您只是没有使用它。
一种常见的配置是使用 NSTableCellView
作为单元格 View ,然后使用绑定(bind)将 subview 绑定(bind)到通过其 objectValue
属性的关键路径。
关于swift - tableView的目的(_ :objectValueFor:row:),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708427/