小编tim*_*imo的帖子

在基于视图的NSOutlineView中更改NSTableCellView的objectValue不会传播到dataSource

我使用基于视图NSOutlineView来显示和选择科学应用程序的分层结构项.

基于视图的NSOutlineView

大纲列中的每一行代表一个项目,由项目特定图标表示(图片中全部相同),一个复选框,显示项目是否被选中,以及项目名称.我需要图标,复选框和名称出现在同一个单元格中,因此我使用的是基于视图的NSOutlineView.

我已经实现了NSOutlineViewDataSource协议来向大纲视图提供数据.

该方法outlineView:objectValueForTableColumn:byItem:提供具有属性BOOL selected和的自定义对象NSString *name.

我在IB中的自定义表单元格视图组成如下:

IB中基于视图的NSOutlineView

我将复选框值objectValue.selected和标签值绑定到objectValue.name.

正如我所希望的那样,大纲视图很好地显示了objectValue提供的名称和选择状态.

但是,如果我更改复选框的状态,则outlineView:setObjectValue:forTableColumn:byItem:在我的dataSource中不会触发NSOutlineViewDataSource协议中定义的方法以提供新更改的对象值.请注意,如果我不使用单元格的自定义视图,则此方法有效.

我通过在传递的对象objectValue.selectedsetSelected方法中插入NSLog语句来检查单击复选框时是否实际更改了表格单元格视图objectValue.该selected成员正确更改状态.

如何将objectValue后面的更改传播到我的dataSource模型?我检查了NSOutlineView的委托方法,但找不到通过我的复选框发信号通知单元格视图的objectValue的方法(即单元格视图已"结束编辑").我还缺少其他一些基本观点吗?

cocoa objective-c nsoutlineview nstableview osx-lion

5
推荐指数
1
解决办法
1823
查看次数