【问题标题】:NSOutlineView with manual Cocoa bindings带有手动 Cocoa 绑定的 NSOutlineView
【发布时间】:2014-07-10 21:04:50
【问题描述】:

我有一个绑定到NSTreeControllerNSOutlineView。详情如下:

  • 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


    【解决方案1】:

    我相信单元格视图中的视图绑定独立于大纲视图内容的绑定。无论大纲视图是否使用绑定,它最终都会设置单元格视图的objectValue 属性。只要这是以符合 KVO 的方式(确实如此)完成的,对该属性的任何绑定都将起作用。

    【讨论】:

    • 谢谢。我不知道该怎么做。我删除了outlineView 内容到treeController 的“arrangedObject”的绑定。我实现了所需的委托方法:outlineView: numberOfChildrenOfItem:outlineView:child:ofItem:outlineView: viewForTableColumn:item: 并让 tableview 正确显示所有行,但 tableviewCell 中没有显示绑定的标签(直接实现的标签在 viewForTableColumn:item: 中显示得很好)。有任何想法吗?我猜objectValue 没有获取数据?
    • 你实现-outlineView:objectValueForTableColumn:byItem:了吗?
    • 不,可能就是这样!我对outlineView child:ofItem:outlineView:objectValueForTableColumn:byItem 中的内容有点困惑......让我试着解决这个问题,看看它是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多