我想使用Cocoa绑定实现没有的大纲视图。
我检出了this tutorial,其中没有一个使用数据源方法
optional func outlineView(_ outlineView: NSOutlineView,
objectValueFor tableColumn: NSTableColumn?,
byItem item: Any?) -> Any?
但是,苹果公司的documentation状态:
虽然此方法在协议中标记为
@optional
,但如果您没有使用Cocoa绑定为大纲视图提供数据,则必须实施此方法。
对于本教程,似乎没有该方法就可以工作。 但是那有什么好处,又应该如何使用?
(让我感到困惑的是,它的读取像应该返回一个数据对象一样,但是在我的理解中,它传递了一个item
参数作为输入,而是。 )
答案 0 :(得分:1)
NSTableView
/ NSOutlineView
及其文档很乱。
byItem
的{{1}}参数是该行表示的对象,返回值是该单元格表示的对象。比较tableView(_:objectValueFor:row:)的返回值是
数据源在视图的指定表列中的一项。
另请参阅the objectValue property of NSTableCellView
代表单元格数据的对象。
使用绑定时,表会自动设置objectValue,或者是NSTableViewDataSource协议方法tableView(_:objectValueFor:row :)返回的对象。
实际上,绑定表视图内容时,outlineView(_:objectForValue:byItem:)
是行对象。
NSOutlineView.h关于objectValue
:
注意:此方法对于基于视图的OutlineView是可选的。
Apple的文档
虽然该方法在协议中被标记为@optional,但是如果您没有使用Cocoa绑定为大纲视图提供数据,则必须实现此方法。
仅对基于单元格的轮廓视图有效。
如果您在outlineView(_:objectValueFor:byItem:)
的单元格中设置控件的值,则不必实现outlineView(_:viewFor:item:)
。
如果要使用单元格视图的outlineView(_:objectValueFor:byItem:)
属性,请实施outlineView(_:objectValueFor:byItem:)
。例如,当绑定单元格中控件的值而不绑定大纲视图的内容时。