获取NSCollectionView中的视图索​​引?

时间:2011-10-22 15:10:15

标签: cocoa indexing nstableview nscollectionview nscollectionviewitem

我使用新的基于视图的NSTableView为Mac OS X Lion开发了一个应用程序,但是由于我想将整个应用程序移植到Snow Leopard,我试图找出模拟这样一个tableview的最佳方法。到目前为止,我已经创建了一个NSCollectionView,一切都很好,除了我无法获取触发按钮单击事件的视图的索引。 在Lion中,我有以下功能:

- (IBAction)buttonClick:(id)sender

所以我可以使用方法(我记不起它的名字)来获取tableview中的视图索​​引,如

- (NSInteger)rowForView:(NSView *)aView

将aView作为发件人的超级视图,但我找不到类似于集合视图的东西...唯一“有用”的方法似乎是

- (NSCollectionViewItem *)itemAtIndex:(NSUInteger)index

(或类似的东西),但这对我无效,因为它返回一个NSCollectionViewItem,我甚至无法访问它只知道相应的视图!

5 个答案:

答案 0 :(得分:4)

在按钮内单击,尝试以下代码:

id collectionViewItem = [sender superview];
NSInteger index = [[collectionView subviews]  indexOfObject:collectionViewItem];
return index;

希望这会有所帮助:)

答案 1 :(得分:2)

Geesh!这两种方法都存在问题。我可以看到第一个如何工作,但请注意“collectionViewItem”实际上是视图,而不是collectionViewItem,它是一个视图控制器。

第二种方法不起作用,除非您将按钮子类化并放入到collectionViewItem的后向链接。否则,您的视图不知道collectionViewItem控制它。您应该使用绑定到collectionViewItem的representObject的选择器来获取对数组中正确对象的操作。

答案 2 :(得分:1)

如下:

id obj = [collectonViewItem representedObject];
NSInteger index = [[collectionView contents] indexOfObject:obj];

答案 3 :(得分:0)

正如我在此建议的那样:How to handle a button click from NSCollectionView

我会这样做(因为你要按的按钮应该与相应的模型耦合,因此代表的对象):

  1. 将方法添加到collectionViewItem的模型(例如buttonClicked)
  2. 将按钮目标绑定到集合查看项
  3. 将set model key path绑定到:representObject
  4. 将set selectorname绑定到:您之前选择的methodname(例如buttonClicked)
  5. 如果必须告知委托或建立观察者模式
  6. ,请将协议添加到模型中

答案 4 :(得分:0)

  1. 使用NSArrayController绑定到NSCollectionView,

  2. 使用collectonViewItem.representedObject获取自己定义的自定义模型。

  3. 在自定义模型中保存并获取索引。

  4. 这对我有用。