macos - 我真的需要实现outlineView(_:objectForValue:byItem:)吗?如何?
问题描述
我想在不使用 Cocoa 绑定的情况下实现大纲视图。
我在其他一些教程中查看了本教程,但没有一个使用数据源方法
optional func outlineView(_ outlineView: NSOutlineView,
objectValueFor tableColumn: NSTableColumn?,
byItem item: Any?) -> Any?
但是,Apple 的文档指出:
虽然此方法
@optional
在协议中被标记,但如果您不使用 Cocoa 绑定为大纲视图提供数据,则必须实现此方法。
对于教程,它似乎在没有这种方法的情况下工作。但是它有什么用,应该如何使用呢?
(让我感到困惑的是,它读起来好像应该返回一个数据对象,但它item
作为输入传递了一个参数,在我的理解中它是一个数据对象。)
解决方案
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
单元格视图的属性,请实施。例如,当绑定单元格中控件的值而不绑定大纲视图的内容时。
另请参阅以编程方式填充表视图
推荐阅读
- excel - 删除0并在excel中重新堆叠
- java - 使用自定义 Equals 获取对象的重复计数
- python - 解析文本文件时意外覆盖变量(python)
- html - 第二次迭代时反应组件中不必要的填充?
- ios - Mapbox iOS 集群工作,但圆形样式层和数字层没有出现/反映集群的标记密度
- python - 使用自己的数据使用 Tensor2Tensor 训练 Transformer
- javascript - 如何在不验证缓存的情况下更新背景图像
- powershell - Powershell 使用 'out-file' 省略 CRLF 输出
- freertos - OpenVPN + Radius认证如何断开用户连接
- mysql - 使用相关表的正确方法和可能的解决方法?