【问题标题】:NSButton inside tableCellView: how to use the "action invocation" for a View Based NSTableView/NSArrayControllertableCellView 内的 NSButton:如何对基于视图的 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 示例中一样)

标签: cocoa core-data interface-builder nstableview nsarraycontroller


【解决方案1】:

我能够通过在按钮本身(NSTableCellView 中的视图类)上设置一个操作,然后将 NSTableView 的委托设置为实现选择器的类来实现这一点。然后它会按预期工作。

【讨论】:

    【解决方案2】:

    澄清我的问题:

    如果我的数据源有另一个客户端,例如通过 Web 服务连接,并且我想触发一个事件。我会使用实体属性来通知客户。因此,我在 tableCellView 中添加了一个按钮。

    我从连接到核心数据实体的 NSTableView 和 NSArrayController 作为对象控制器开始。文本字段、图像、复选框和弹出按钮在绑定到控件后立即起作用。但是我没有找到绑定“按钮”的可行解决方案。(我尝试将控件、表格、单元格视图和按钮子类化,但没有成功。)

    最后我切换到动作/委托方法。使用 rowForView:、itemAtRow: 和 representObject: 方法可以修改实体的属性。

    我对这种不雅的解决方案(outlineView/分离代码)不满意。如果 arrayControl 有解决方案,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-14
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      相关资源
      最近更新 更多