我已经在这个主题上杀死了一天,但仍然不知道如何以正确的方式完成。
我NSOutlineView
用来显示文件系统层次结构。对于第一列中的每一行,我需要显示复选框、关联的图标和文件或目录的名称。由于没有标准的方法来做到这一点,我已经NSTextFieldCell
使用 SourceView 和 PhotoSearch 示例进行了子类化,value
在 IB 中绑定到name
我的树项类的属性NSTreeController
。我正在使用drawWithFrame:inView:
覆盖来绘制复选框和图像,将文本绘制转发到super
. 我还使用trackMouse:inRect:ofView:untilMouseUp:
覆盖来处理复选框交互。
一切都很好,直到我注意到一旦我在自定义单元格中按下鼠标按钮,单元格对象就会被复制,copyWithZone:
然后这个临时对象会被发送一条trackMouse:inRect:ofView:untilMouseUp:
消息,从而无法修改驻留在看法。
由于问题主题是关于绑定的,我认为这可能是答案,但我完全不明白我应该如何连接所有这些混乱以按预期运行。试过这个:
[[[treeView outlineTableColumn] dataCell] bind:@"state"
toObject:treeController
withKeyPath:@"selection.state"
options:nil];
但根本没有成功。好像我没有得到它。
这可能是我采取的完全错误的方式吗?您能否提出更好的替代方案或任何链接以供进一步阅读?
UPD 1/21/11:我也试过这个:
[[[treeView outlineTableColumn] dataCell] bind:@"state"
toObject:treeController
withKeyPath:@"arrangedObjects.state"
options:nil];
但不断收到类似“[<_NSControllerTreeProxy 0x...> valueForUndefinedKey:]:此类与键状态的键值编码不兼容”之类的错误。和类似的。