【问题标题】:Get index of a view inside a NSCollectionView?获取 NSCollectionView 中视图的索引?
【发布时间】:2011-10-22 15:10:15
【问题描述】:

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

【问题讨论】:

    标签: cocoa indexing nstableview nscollectionview nscollectionviewitem


    【解决方案1】:

    在 buttonClick 中,试试这个代码:

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

    希望这会有所帮助:)

    【讨论】:

    • 我不敢相信,它似乎有效!我不确定这是实现这一目标的最佳方法(Apple 应该实施更好的方法),但无论如何这解决了我的问题。非常感谢!
    • 一个警告:一旦视图项目被重新排序(例如,如果您支持通过拖放重新排列),这将不再起作用。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      比如:

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

      【讨论】:

      • 就像我说的,我无法访问 collectonViewItem 只知道代表它的视图...
      【解决方案4】:

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

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

      1. 为你的 collectionViewItem 的模型添加一个方法(例如 buttonClicked)
      2. 将按钮目标绑定到集合视图项
      3. 绑定时将模型键路径设置为:representedObject
      4. 在绑定时将选择器名称设置为:您之前选择的方法名称(例如 buttonClicked)
      5. 如果您必须告诉委托或建立观察者模式,请将协议添加到您的模型中

      【讨论】:

        【解决方案5】:
        1. 使用 NSArrayController 绑定到 NSCollectionView,

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

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

        这对我有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-19
          相关资源
          最近更新 更多