首页 > 解决方案 > 我真的需要实现outlineView(_:objectForValue:byItem:)吗?如何?

问题描述

我想在使用 Cocoa 绑定的情况下实现大纲视图。

我在其他一些教程中查看了本教程,但没有一个使用数据源方法

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

但是,Apple 的文档指出:

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

对于教程,它似乎在没有这种方法的情况下工作。但是它有什么用,应该如何使用呢?

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

标签: macoscocoansoutlineview

解决方案


NSTableView/NSOutlineView它的文档是一团糟。

byItem参数outlineView(_:objectForValue:byItem:)是行表示的对象,返回值是单元格表示的对象。比较tableView(_:objectValueFor:row:)返回值是

视图的指定表列中数据源中的一项。

另见NSTableCellView 的 objectValue 属性

表示单元格数据的对象。

objectValue 在使用绑定时由表自动设置或者是 NSTableViewDataSource 协议方法 tableView(_:objectValueFor:row:) 返回的对象。

现实中绑定表视图内容的时候,objectValue就是row对象。

NSOutlineView.h 说outlineView(_:objectValueFor:byItem:)

注意:此方法对于基于视图的 OutlineView 是可选的。

苹果的文档

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

仅对基于单元格的大纲视图有效。

如果您在单元格中设置控件的值,outlineView(_:viewFor:item:)那么您不必实现outlineView(_:objectValueFor:byItem:).

outlineView(_:objectValueFor:byItem:)如果要使用objectValue单元格视图的属性,请实施。例如,当绑定单元格中控件的值而不绑定大纲视图的内容时。

另请参阅以编程方式填充表视图


推荐阅读