0

这是我所拥有的:

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

现在,问题:

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

PS我显然可以做类似的事情:

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

但它看起来一点也不好看——尽管它确实有效。

想法?

4

1 回答 1

1

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

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

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

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

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

于 2014-12-26T10:44:39.870 回答