tableCellView 内的 NSButton:如何对基于视图的 NSTableView/NSArrayController 使用“动作调用”
Posted
技术标签:
【中文标题】tableCellView 内的 NSButton:如何对基于视图的 NSTableView/NSArrayController 使用“动作调用”【英文标题】:NSButton inside tableCellView: how to use the "action invocation" for a View Based NSTableView/NSArrayController 【发布时间】:2012-11-25 17:25:35 【问题描述】:对于基于视图的 NSTableView/NSarrayController:如何使用来自 tableCellView 内的 NSButton 的“动作调用”来更改实体的属性?
我有以下设置:
具有一列的“基于视图”的 NSTableview。 使用“实体模式”并绑定到核心数据实体的 NSarrayController。我想使用按钮的动作调用来更新实体。例如将“bool”属性设置为 true。
如果我只是使用“模型键路径”并将其设置为 objectValue.escaped,则该按钮将被禁用。
【问题讨论】:
或者我应该使用“sent action”吗?或者忘记 nsarraycontrol 并使用数据源? 如果我对委托使用“发送操作”(例如“petEscaped:”),我只会得到发件人 ID(按钮))。由于未选择该行(不是很奇怪)我没有机会找到和访问实体。 我为我的问题找到的最佳 SDK 示例是 TableViewPlayground,其中使用了 OutlineView 中的按钮。令我惊恐的是,这个例子中使用了一个带有 data-source 绑定的“自制”控件。这将导致大约 1000 行额外代码仅用于 UI 处理(从演示中聚合)和另一个用于 core-data 处理的控件类。 我使用带有 IBAction 的 tableView 委托来处理按钮和 rowForView: 和 itemAtRow: 来读取行数据。 (就像在 TableViewPlayground 示例中一样) 【参考方案1】:我能够通过在按钮本身(NSTableCellView 中的视图类)上设置一个操作,然后将 NSTableView 的委托设置为实现选择器的类来实现这一点。然后它会按预期工作。
【讨论】:
【参考方案2】:澄清我的问题:
如果我的数据源有另一个客户端,例如通过 Web 服务连接,并且我想触发一个事件。我会使用实体属性来通知客户。因此,我在 tableCellView 中添加了一个按钮。
我从连接到核心数据实体的 NSTableView 和 NSArrayController 作为对象控制器开始。文本字段、图像、复选框和弹出按钮在绑定到控件后立即起作用。但是我没有找到绑定“按钮”的可行解决方案。(我尝试将控件、表格、单元格视图和按钮子类化,但没有成功。)
最后我切换到动作/委托方法。使用 rowForView:、itemAtRow: 和 representObject: 方法可以修改实体的属性。
我对这种不雅的解决方案(outlineView/分离代码)不满意。如果 arrayControl 有解决方案,请告诉我。
【讨论】:
以上是关于tableCellView 内的 NSButton:如何对基于视图的 NSTableView/NSArrayController 使用“动作调用”的主要内容,如果未能解决你的问题,请参考以下文章