代码之家  ›  专栏  ›  技术社区  ›  Austin

如何从NSCollectionViewItem中的视图获取表示的对象?

  •  6
  • Austin  · 技术社区  · 17 年前

    在.h文件中:

    IBOutlet NSCollectionViewItem *item; // Connected in IB
    

    在.m文件中

    NSString *seq = [[item representedObject] valueForKey:@"seq"];
    NSLog(@"Seq: %@", seq); // returns Seq: (null)
    

    我知道seq已被填充,因为我使用表示的Object.seq键路径将其绑定到IB中CollectionViewItem视图中的标签,这是有效的。

    4 回复  |  直到 17 年前
        1
  •  1
  •   kperryua    17 年前

    NSCollectionViewItem很可能不会通过IBOutlet连接将其项目的视图复制到原型NSCollectionViewItem。因此, item 为零,因此 seq 也将为零。

    访问NSCollectionViewItem实例的典型模式是绑定到原型。你提到你做了这件事,而且它奏效了。这仅仅是因为这是一种典型的、受支持的方式。

    如果你真的需要以绑定无法提供的方式直接连接到项目,你可能必须手动设置它。一种方法是覆盖NSCollectionViewItem的 -copyWithZone: ,呼叫super,然后手动建立连接。

        2
  •  1
  •   Joubert Nel    16 年前

    1) 对用于在集合视图中呈现项目的NSView进行子类化

    2) 在此子类中,添加一个委托属性

    3) 转租NSCollectionViewItem

    4) 重写setView:方法。添加一行,将视图的委托属性设置为NSCollectionViewItem实例(即self)。

    现在,在NSView子类中,您将可以通过委托属性访问相应的NSCollectionView项(例如,您可以访问其表示的Object)。

        3
  •  0
  •   itmm    12 年前

    我也遇到了同样的问题,但找到了一个非常简单的解决方案:我将视图放在另一个.xib中,并将其链接到NSCollectionViewItem(实际上是一个NSViewController)中。然后,.xib将针对每个单元进行反序列化,并设置所有出口。

        4
  •  0
  •   Stephen Paul    10 年前
    1. 子类NSView。
    2. 向所述子类添加委托方法。..有点像 - (void)mouseDownOnItemAtIndex:(NSUInteger)index 告诉听众用户点击了特定索引处的项目。
    3. [[collectionView subviews] indexOfObject:self] .在委托方法中传递该索引 index 参数。
    4. 符合NSView中定义的协议的类现在将能够听到特定单元格中的任何鼠标按下事件。如果你想要特定项目的representative Object,只需调用 collectionView:itemAtIndex 并通过以下方式访问该项目 representedObject 房地产 NSCollectionViewItem .