objective-c - 将单个 NSCell 绑定(bind)到多个值

标签 objective-c cocoa nscell

我已经在这个主题上浪费了一天的时间,但仍然不知道如何以正确的方式完成此任务。

我正在使用 NSOutlineView 来显示文件系统层次结构。对于第一列中的每一行,我需要显示复选框、关联的图标以及文件或目录的名称。由于没有标准方法来实现此目的,因此我使用 SourceView 和 PhotoSearch 示例对 NSTextFieldCell 进行子类化,将 IB 中的 value 绑定(bind)到 name 属性我的树项目类是 NSTreeController。我使用 drawWithFrame:inView: 覆盖来绘制复选框和图像,将文本绘制转发到 super。我还使用 trackMouse:inRect:ofView:untilMouseUp: 覆盖来处理复选框交互。

一切都很好,直到我注意到一旦我在自定义单元格内按下鼠标按钮,单元格对象就会被 copyWithZone: 复制,然后这个临时对象将被发送到 trackMouse :inRect:ofView:untilMouseUp: 消息,使得无法修改 View 中原始单元格的检查状态。

由于问题主题是关于绑定(bind)的,我认为这可能是答案,但我完全不明白应该如何将所有这些困惑连接起来以按预期运行。尝试过这个:

[[[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:]:此类与键状态的键值编码不兼容的错误。”和类似的。

最佳答案

您绑定(bind)表(或大纲)列的值,而不是单个数据单元格的状态。数据单元格的对象值设置为当前行/列的值,然后进行绘制,这样您就不会无缘无故地创建数千(或数百万?)的单元格。

此外,您需要树或数组 Controller 的 arrangedObjects,而不是它的选择。

列的值绑定(bind)到树 Controller 的arrangedObjects作为 Controller 键,并将“state”作为IB中的模型键路径;或上面代码中的@“arrangedObjects.state”。

关于objective-c - 将单个 NSCell 绑定(bind)到多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4751589/

相关文章:

iphone - block 、栈和堆

ios - Storyboard中的新 View Controller 中未调用 TableView 委托(delegate)方法

iphone - 帮助格式化数字,objective-c

objective-c - 自定义 NSTableView 单元格的最简单方法是什么?

iphone - 使用 iOS 中的加速度计进行跳跃检测

objective-c - 如何将 NSViewController 锚定为弹出框?

cocoa - 如何更改 NSProgressIndicator 的高度?

objective-c - 从 osx 中的代码设置 AutoresizingMask

objective-c - NSTableView 在 NSCell 中具有多个 UI 元素(如 Transmission)

objective-c - 如何在 NSTableView 中显示图像?