NSButton 绑定到 NSCollectionViewItem: representedObject?

NSButton binding to NSCollectionViewItem: representedObject?

当我预先将按钮添加到 NSCollectionViewItem 的视图时,我可以在检查器中绑定它的操作:

哪个没问题。

现在我想在视图的 mouseDown: 中以编程方式创建该按钮,我应该为 bind: 选项分配什么以获得与检查器中的 "Bind to: Collection View Item" 相同的结果?

代码如下:(Swift)

aButton!.bind(
    "argument",
    toObject: ???, // <- what should I set here?
    withKeyPath: "representedObject",
    options: options
)

编辑: 我能够通过子类化 NSCollectionView 然后覆盖 newItemForRepresentedObject: 来分配 representedObject 到子类视图。

还是想知道有没有不用子类化的方法NSCollectionView.

您应该绑定到 NSCollectionViewItem 实例,该实例拥有按钮是其后代的视图。

您从什么上下文创建按钮并尝试绑定它?这是在集合视图的控制器中吗?还是在集合视图项本身(它是集合视图项视图的控制器)中?或者它可能在自定义视图中 class,尽管那会有点奇怪。

从集合视图的控制器中,您可以使用-itemAtIndex:获取相关的集合视图项。

从集合视图项目中,您只需使用 self。但是,在这种情况下,绑定并不能真正为您带来太多好处。您也可以只设置按钮的 targetaction 并在操作方法中使用 representedObject 做一些事情。

如果您是从视图中执行此操作,则需要一种方法来获取对集合视图项的引用。您应该在连接到 NIB 中的集合视图项的视图上添加一个弱插座。然后,您将使用该出口获取该 bind() 调用的集合视图项。