在NSCollectionView项目视图操作中获取表示对象

时间:2014-12-26 09:58:19

标签: objective-c cocoa cocoa-bindings nscollectionview nscollectionviewitem

以下是我所拥有的:

  • NSCollectionView
  • 通过NSArrayController
  • 填充
  • 每个'项目' (NSCollectionViewItem)在附加视图中显示其内容
  • 此视图包含NSButton

现在,问题是:

当用户点击按钮时,我怎么知道哪个是代表的对象? (附加到按钮所属特定视图的项目)

P.S。我显然可以这样做:

NSInteger itemIndex = [[_collectionView subviews] indexOfObject:[sender superview]];
MyItem item = _items[itemIndex];

但它看起来并不好看 - 虽然它 工作。

想法?

1 个答案:

答案 0 :(得分:1)

您没有说明按钮操作的目标是什么对象。你可以通过以下几种方式做到这一点。

例如,您可以使用NSCollectionViewItem的自定义子类。您可以将按钮的操作定位到集合视图项。然后,集合视图项将直接查询其自己的representedObject属性。如有必要,它可以用必要的信息调用另一个对象(例如窗口控制器)。或者只是在表示的对象上调用一个方法,如果合适的话。

同样,您可以使用自定义视图类作为集合视图项的视图。该视图类可以将一个插座连接到其集合视图项。该按钮将定位到该视图类的操作方法,该方法将从其出口获取集合视图项,然后从集合视图项中获取representedObject

另一种方法是使用按钮的绑定。您可以绑定其目标(包括指定选择器),也可以绑定要传递给选择器的参数。您可以使用模型键路径representedObject将目标绑定到集合视图项(集合视图项视图NIB中的文件所有者)。然后,该按钮直接定位所表示的对象。

或者,您可以将按钮的目标绑定到其他内容,并将参数绑定到集合视图项,模型键路径representedObject。因此,该按钮将调用对象上的方法,并将传递所表示的对象作为该方法的参数。