我想在不使用Cocoa绑定的情况下实现大纲视图。
我检查了this tutorial之中的一些,但它们都不使用数据源方法
optional func outlineView(_ outlineView: NSOutlineView,
objectValueFor tableColumn: NSTableColumn?,
byItem item: Any?) -> Any?
但是,Apple的documentation指出:
虽然此方法在协议中标记为
@optional
,但如果不使用Cocoa绑定为大纲视图提供数据,则必须实现此方法。对于本教程,似乎没有该方法就可以工作。但是,那有什么好处呢?应该如何使用呢?
(令我困惑的是,它的读取就像应该返回一个数据对象一样,但是它被传递了一个
item
参数作为输入,据我所知这是一个数据对象。) 最佳答案
NSTableView
/ NSOutlineView
及其文档很乱。byItem
的outlineView(_:objectForValue:byItem:)
参数是该行表示的对象,返回值是该单元格表示的对象。比较tableView(_:objectValueFor:row:)返回值是
视图的指定表列中数据源中的一项。
另见the objectValue property of NSTableCellView
表示单元格数据的对象。
使用绑定时,表会自动设置objectValue,或者是NSTableViewDataSource协议方法tableView(_:objectValueFor:row :)返回的对象。
实际上,绑定表视图内容时,objectValue
是行对象。
NSOutlineView.h关于outlineView(_:objectValueFor:byItem:)
说:
注意:此方法对于基于视图的OutlineView是可选的。
苹果的文档
虽然此方法在协议中标记为@optional,但是如果不使用Cocoa绑定为大纲视图提供数据,则必须实现此方法。
仅对基于单元格的轮廓视图有效。
如果在outlineView(_:viewFor:item:)
中的单元格中设置控件的值,则不必实现outlineView(_:objectValueFor:byItem:)
。
如果要使用单元格视图的outlineView(_:objectValueFor:byItem:)
属性,请实现objectValue
。例如,当绑定单元格中控件的值而不绑定大纲视图的内容时。
另见Populating a Table View Programmatically
关于macos - 我真的需要实现outlineView(_:objectForValue:byItem :)吗?怎么样?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55557440/