【问题标题】:NSPopupButton within a view-based NSTableView基于视图的 NSTableView 中的 NSPopupButton
【发布时间】:2012-12-22 13:58:31
【问题描述】:

我正在使用核心数据和最新的 XCode。我有一个基于视图的表,其中一个列中有NSPopupButtons。该表有一个数组控制器,它从实体 A 获取数据。实体 B 有另一个数组控制器。正是这个实体 B 应该填充弹出按钮项。

一个表外的NSPopupButton可以填写没有问题,所以这一定是表相关的问题!

我应该如何填充表格列中的弹出按钮?

【问题讨论】:

  • 你研究过 NSTableViewCell 的子类化吗?
  • 不,我没有。这可能会奏效,但这真的是我应该继续的方式吗?单元格中的弹出窗口似乎是使用基于视图的表格的主要原因,所以我更愿意尽可能远离子类化:-)
  • 另一种可能性是使用 NSPopUpButtonCell。但是,这可能不是您所希望的那样。
  • NSTableCellView 文档声明“NSTableCellView 类是一个可重用的容器视图,显示用于 NSTableView 实例中的特定单元格,它使用行作为内容。imageView 和 textField 属性在 Interface Builder 中连接。其他属性可以通过继承 NSTableCellView 并添加所需的属性并以编程方式或在 Interface Builder 中连接它们来添加。"
  • 啊,没错。真可惜,我希望有一个快速的绑定解决方案。

标签: macos cocoa core-data nstableview nspopupbutton


【解决方案1】:

您可以执行以下操作:

  1. 将表格视图的行高增加到 22 像素或更大。
  2. 绑定到objectValue.menuValues(显然是您添加到objectValue 的内容)。
  3. NSPopupButton 应作为NSTableCellView 的子视图放置。

这样,只要您的objectValue 具有能够填充NSPopupButton 菜单的绑定,您就不需要直接访问它。从这里您还可以将selector 出口设置为您的委托/视图控制器的类,并使用一些漂亮的superview 挖掘来找到持有它的NSTableCellView,然后从那里进行操作。

我知道这很复杂,但它几乎是零代码。曾几何时,我曾经看不起IB太“n00b”,但Bindings让它成为了一个相当强大的工具。

【讨论】:

  • 感谢您的建议!我一有机会就会看看这个,希望在星期一。
  • 没问题,我很想看看这对你有什么影响。
  • 抱歉,在对 UI 进行大修后,我的项目中不再存在此问题,不幸的是,我无法轻松查看您的建议。我确实认为我以后会遇到这个问题,我一定会报告我的结果!
【解决方案2】:

我当然找到了基于单元的 NSPopupButtonCell 工作。您应该能够使用基于视图的表来实现相同的目标。当您直接绑定到视图中的对象时,绑定完全不同。因此,将弹出窗口的内容直接绑定到数据源。在 IB 中为实体 B 创建一个 ArrayController 并将其直接绑定到 Popups Content,还将 contentValue 绑定到要显示的实体 B 的字段。

然后将弹出窗口的列内容绑定到实体 A,现在将弹出窗口的值绑定到表格单元格视图对象值。(实体 A 字段名称)。

【讨论】:

    【解决方案3】:

    需要通过 Files' Owner 传递控制器,而不是直接绑定到弹出按钮。 (有人说,这是 Xcode 中的一个 bug..)

    所以,我的解决方案在文件所有者中使用了一个 IBOutlet (currencyCtrl),它绑定到数组控制器(在您的情况下是实体 B)。 对于 NSPopupButton,您应该使用以下绑定:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-25
      • 1970-01-01
      • 2014-08-12
      相关资源
      最近更新 更多