如何创建关联NSTreeController的NSOutlineViewController并完成绑定配置
NSTreeController 绑定操作步骤
1. 先保证NodeInfo类满足KVO要求
因为你的数据从网络接口加载,首先要确保自定义的NodeInfo类符合Cocoa绑定的KVC/KVO规则,才能正常触发界面更新:
- Swift开发的话,NodeInfo需要继承自NSObject,用到绑定的属性(包括子节点字段
children、显示用的字段如名称等)要加@objc dynamic修饰 - Objective-C开发的话,对应属性添加
dynamic修饰符即可
示例Swift代码:
class NodeInfo: NSObject { // 示例显示用字段,可根据你的需求替换 @objc dynamic var title: String = "" // 和你配置treeController时填的子节点keyPath保持一致 @objc dynamic var children: [NodeInfo] = [] // 其他自定义属性按同样规则声明 }
2. 绑定NSTreeController的内容源
这一步对应你参考的官方示例里的绑定配置:
- 打开你的故事板/Xib文件,选中之前添加的NSTreeController控件
- 切换到Xcode右侧的绑定检查器(快捷键
⌥⌘7) - 在「控制器内容」分组下找到
content选项,勾选启用绑定 - 绑定目标选择当前treeController所在的OutlineViewController
- 模型密钥路径填写你在OutlineViewController中声明的、用来存储网络请求返回的根节点数组的属性名,比如该属性命名为
rootNodeList,这里就填rootNodeList
注意:这个存储根节点的属性同样需要加@objc dynamic修饰,保证绑定可观测
3. 绑定NSOutlineView单元格显示内容
你已经完成了outlineView和treeController的内容关联,接下来绑定每列的显示内容:
- 选中NSOutlineView下对应的表格列(NSTableColumn)
- 打开绑定检查器,找到
value选项,勾选启用绑定 - 绑定目标选择你添加的NSTreeController
- 模型密钥路径填写
arrangedObjects.你的显示字段名,比如要显示NodeInfo的title字段,就填arrangedObjects.title - 如果有多个显示列,重复上述操作修改对应字段名即可
4. 网络数据加载后触发更新
不需要额外调用reload方法,网络请求完成后,将解析好的NodeInfo根节点数组赋值给你第二步绑定的rootNodeList属性,绑定机制会自动触发TreeController和OutlineView的内容刷新。
可选补充:选中节点绑定
如果需要监听用户选中的节点,可在NSTreeController的绑定检查器中,将selectionIndexPaths或者selectedObjects绑定到OutlineViewController的对应属性,即可实时拿到选中的NodeInfo实例。
内容的提问来源于stack exchange,提问作者Patrice Rapaport
相关产品推荐
相关产品推荐

