微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

方法outlineView:objectValueForTableColumn:byItem:提供一个自定义对象,该对象具有选中的BOOL属性和Nsstring * name.

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

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

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

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

通过将NSLog语句插入到作为objectValue传递的对象的setSelected方法中,单击复选框,检查表单元格视图的objectValue.selected是否实际更改.所选成员正确更改状态.

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

解决方法

setobjectValue不适用于基于视图的:

来自标题::

/* View Based OutlineView: This method is not applicable.
 */
- (void)outlineView:(NSOutlineView *)outlineView setobjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn byItem:(id)item;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐