我是新来的Cocoa编程(但与其他UI框架相对有经验),并且无法确切地知道我在哪里出错 以下情况。如何更改NSOutlineViewDataSource触发刷新其他项目
我有一个由NSOutlineViewDataSource包装的数据的“树”。这些项目是非常基本的读/写(想想复选框)。然而,当
setObjectValue:(ID)对象forTableColumn:(NSTableColumn *)TableColumn的byItem:(ID)项目
被调用时,改变我做影响的不只是问题的一个项目,但可以传播到其他项目,即检查一个项目可能会导致树中的其他项目选择或取消选择。在数据模型层面,我已经很好地工作了。我的问题是以某种方式强制轮廓刷新,以便这些其他更改显示在UI中。
所以基本上,当setObjectValue被调用时,被更改的单个单元格会刷新,但我需要(可能)整个树在UI中刷新。
做这种事情的最佳做法机制是什么?是否有一个NSOutlineView事件,我应该听,然后触发刷新。我的NSOutlineViewDataSource应该引发视图监听的事件吗?或者我的基本方法完全错误?
(我其实这样做有MONOMAC但我认为任何回答适用于可可一般)
所以控制器牵着我的大纲视图将被设置成为所有数据项观察者?然后它可以通过在大纲视图上调用reloadData()来触发刷新等,如果它觉得有必要的话? – 2012-03-30 04:29:39
是的,这是一般的想法。您可以将“addObserver”设置为self,然后确保在该控制器中实现observeValueForKeyPath。 – 2012-03-30 12:26:47