【发布时间】:2014-07-10 21:04:50
【问题描述】:
我有一个绑定到NSTreeController 的NSOutlineView。详情如下:
- treeController 具有类模式,CommonListData 作为类名,具有“children”属性
- treeController 还具有绑定到文件所有者的“headersArray”(类型为
NSArray)的“内容数组”。 “headersArray”是 CommonListData 项的数组 -
NSOutlineView将“内容”绑定到 treeController 的排列对象 - 基于视图的outlineView是在Interface Builder中设计的,每个单元格视图都有很多元素。每个元素(标签、图像等)都有与
NSTableCellView的“值”绑定以及相关的 objectValue.xxx 模型键路径
设置相当简单,在添加和删除对象时一切正常。但问题是它在从大纲视图中添加或删除项目时不使用任何NSOutlineView / NSTableView 动画。如果我向 treeController 添加或删除任何元素,或者直接向 headersArray 的子对象添加或删除任何元素,该表就会自行重新加载。我不确定这是否是 Cocoa Bindings 的限制或什么。
无论如何,我都在考虑是否可以禁用所有绑定并手动执行此操作。唯一的缺点是NSOutlineView 单元格视图上有复杂的元素,我不想将视图元素映射到代码中的数据。理想情况下,它应该将绑定保留在NSTableViewCell。
所以我的问题是:
是否可以将 Interface Builder 中的绑定保留在 NSTableCellView 中,但不能将内容绑定到 treeController?或者是否有绑定“arrangedObjects”的替代方法,这样在NSTreeController 中添加和删除数据不会触发对 UI 的更新?
对绑定进行更多控制会有所帮助,这样我就可以正确触发动画,而不是让它随着每次更新而跳来跳去。
【问题讨论】:
标签: macos cocoa cocoa-bindings nsarraycontroller nsoutlineview