我真的需要实现outlineView(_:objectForValue:byItem :)吗?怎么样?

时间:2019-04-07 09:25:23

标签: macos cocoa nsoutlineview

我想使用Cocoa绑定实现没有的大纲视图。

我检出了this tutorial,其中没有一个使用数据源方法

optional func outlineView(_ outlineView: NSOutlineView, 
             objectValueFor tableColumn: NSTableColumn?, 
                            byItem item: Any?) -> Any?

但是,苹果公司的documentation状态:

  

虽然此方法在协议中标记为@optional,但如果您没有使用Cocoa绑定为大纲视图提供数据,则必须实施此方法。

对于本教程,似乎没有该方法就可以工作。 但是那有什么好处,又应该如何使用?

(让我感到困惑的是,它的读取像应该返回一个数据对象一样,但是在我的理解中,它传递了一个item参数作为输入,而。 )

1 个答案:

答案 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:)。例如,当绑定单元格中控件的值而不绑定大纲视图的内容时。

另请参阅Populating a Table View Programmatically