我使用新的基于视图的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,我甚至无法访问它只知道相应的视图!
答案 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
我会这样做(因为你要按的按钮应该与相应的模型耦合,因此代表的对象):
答案 4 :(得分:0)
使用NSArrayController绑定到NSCollectionView,
使用collectonViewItem.representedObject获取自己定义的自定义模型。
在自定义模型中保存并获取索引。
这对我有用。