cocoa - 访问 NSCollectionView View 的控件

标签 cocoa nscollectionview

我正在使用 NSCollectionView 来显示各种对象。除了一件烦人的事情之外,一切都运转良好。我不知道如何访问 View 上用于表示集合中每个对象的各种控件。

设置如下:

  • 我已将 NSCollectionView 拖动到 IB 中的 View 中。
  • 我创建了 NSCollectionViewItem 的自定义子类。绘制了我的 IB 类(class) map 。
  • 我创建了一个 NSBox 的自定义子类来充当集合中每个对象的 View 。还在 IB 中映射了此类,并将其连接到我的 NSCollectionViewItem 子类的 view 属性。
  • 我在 IB 中进行了所有绑定(bind),以显示每个对象的正确信息。

View :

enter image description here

生成的 Collection View :

enter image description here

由于我的 NSCollectionViewItem 子类基本上是集合中每个 View 的 Controller ,因此我在 Controller 子类中引用了 View 中各种控件的导出:

@interface SourceCollectionViewItem : NSCollectionViewItem

@property (weak) IBOutlet NSTextField *nameTextField;
@property (weak) IBOutlet NSTextField *typeTextField;
@property (weak) IBOutlet RSLabelView *labelView;
@property (weak) IBOutlet NSButton *viewButton;

@end

当我在调试器中检查 SourceCollectionViewItem 的任何实例时,所有属性都显示为 nil,尽管我实际上可以在屏幕上看到它们,并且所有内容都按应有的方式显示。

我的设置灵感来自 Apple 的示例应用程序 IconCollection .

我显然错过了一些东西。什么?

编辑:我发现各种帖子暗示类似的问题: CocoaBuilder.comthis question就这样。

编辑:为了完整:this post也处理该主题,并根据已接受答案中提到的选项组合提供解决方案。

最佳答案

socket 在 Nib 加载期间设置,并且只有原型(prototype)项从 Nib 加载并分配其 socket 。所有其他 ViewItem 及其 View 都是从原型(prototype)克隆的,在这种情况下,outlet 只是从未初始化的实例变量。

以下是我可以想到的选项:

  • 覆盖 Collection View 的newItemForRepresentedObject:并重新加载 Nib ,而不是克隆原型(prototype)。但这可能会极大地损害性能。
  • 覆盖 Collection View 项的 copyWithZone 并使用 viewWithTag: 手动分配导出以查找它们。
  • 放弃并尝试仅通过绑定(bind)提供数据。

关于cocoa - 访问 NSCollectionView View 的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11386753/

相关文章:

cocoa - iOS:检索短信历史记录

macos - 如何禁用 NSCollectionView 中的选择矩形绘制?

swift - 在 NSCollectionViewDiffableDataSource 中追加部分

objective-c - 如何从 NSCollectionViewItem 的 View 中获取 representedObject?

iphone - 应用程序在同一行的第二次选择时崩溃

objective-c - 圆形 CALayer 周围的边框较深

macos - 当 NSCollectionView 获得或丢失项目时,如何使包含窗口/ View 调整大小?

cocoa - NSCollectionView 的清晰示例和最佳方法

xcode - 错误 : Use of undeclared type 'NSImage' in Swift (Xcode 6 Beta 7)

objective-c - 自动检测 iOS/OS X 和 XCode 4.5 中已弃用的 SDK 方法?