8

我已经使用基于视图的新 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 ,我什至无法访问它只知道相应的视图!

4

5 回答 5

4

在 buttonClick 中,尝试以下代码:

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

希望这可以帮助 :)

于 2011-10-24T16:24:54.200 回答
2

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

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

于 2012-12-02T19:48:40.557 回答
1

怎么样:

id obj = [collectonViewItem representedObject];
NSInteger index = [[collectionView contents] indexOfObject:obj];
于 2011-10-22T15:16:48.443 回答
0

正如我在这里建议的那样:如何处理来自 NSCollectionView 的按钮单击

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

  1. 为您的 collectionViewItem 的模型添加一个方法(例如 buttonClicked)
  2. 将按钮目标绑定到集合视图项
  3. 绑定设置模型键路径到:representedObject
  4. 将设置选择器名称绑定到:您之前选择的方法名称(例如 buttonClicked)
  5. 如果您必须告诉委托或建立观察者模式,请将协议添加到您的模型
于 2013-08-28T01:27:56.293 回答
0
  1. 使用 NSArrayController 绑定到 NSCollectionView,

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

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

这对我有用。

于 2015-10-09T16:41:26.683 回答