以下是我所拥有的:
NSCollectionView
NSArrayController
NSCollectionViewItem
)在附加视图中显示其内容NSButton
现在,问题是:
当用户点击按钮时,我怎么知道哪个是代表的对象? (附加到按钮所属特定视图的项目)
P.S。我显然可以这样做:
NSInteger itemIndex = [[_collectionView subviews] indexOfObject:[sender superview]];
MyItem item = _items[itemIndex];
但它看起来并不好看 - 虽然它 工作。
想法?
答案 0 :(得分:1)
您没有说明按钮操作的目标是什么对象。你可以通过以下几种方式做到这一点。
例如,您可以使用NSCollectionViewItem
的自定义子类。您可以将按钮的操作定位到集合视图项。然后,集合视图项将直接查询其自己的representedObject
属性。如有必要,它可以用必要的信息调用另一个对象(例如窗口控制器)。或者只是在表示的对象上调用一个方法,如果合适的话。
同样,您可以使用自定义视图类作为集合视图项的视图。该视图类可以将一个插座连接到其集合视图项。该按钮将定位到该视图类的操作方法,该方法将从其出口获取集合视图项,然后从集合视图项中获取representedObject
。
另一种方法是使用按钮的绑定。您可以绑定其目标(包括指定选择器),也可以绑定要传递给选择器的参数。您可以使用模型键路径representedObject
将目标绑定到集合视图项(集合视图项视图NIB中的文件所有者)。然后,该按钮直接定位所表示的对象。
或者,您可以将按钮的目标绑定到其他内容,并将参数绑定到集合视图项,模型键路径representedObject
。因此,该按钮将调用对象上的方法,并将传递所表示的对象作为该方法的参数。