首页 文章

带有自定义视图的NSCollectionViewItem

提问于
浏览
1

我一直在努力尝试创建一个NSCollectionView,它有一组带有自定义视图的NSCollectionViewItems . 当项目视图上的控件是标准AppKit控件时,代码工作正常,但是一旦我添加自定义NSView,就无法从Interface Builder绑定它 .

从花费几个小时搜索互联网,似乎有很多选择来解决这个问题,但似乎都是专门的 . 是否有一些简单的示例代码演示了如何在项目视图上使用CustomImage *在该自定义视图上设置image属性?

为每个项目提供数据的模型是:

@interface MyItem : NSObject
@property (retain, readwrite) NSImage * image;
@property (retain, readwrite) NSString * name;
@end

NSCollectionViewItem子类是:

@interface MyCollectionViewItem : NSCollectionViewItem

// Properties
@property (strong) IBOutlet NSTextField * name;
@property (strong) IBOutlet CustomImage * image;

@end

其中CustomImage只是NSImageView的子类 .

我尝试了子类化NSCollectionView并覆盖newItemForRepresentedObject作为一些答案建议并在那里分配:

MyItem * item = (MyItem *)object;
MyCollectionViewItem * newItem = (MyCollectionViewItem *)[super newItemForRepresentedObject:object];

NSView *view = [newItem view];
[view bind:@"name" toObject:item withKeyPath:@"name" options:nil];
[view bind:@"image" toObject:item withKeyPath:@"image" options:nil];
return newItem;

但这只是在绑定调用中引发了一个错误,即'name'不存在 .

从理论上讲,这应该是一个非常简单的解决方法,但我发现的答案都没有说清楚 . 另一种方法是抛弃NSCollectionView并在GitHub上使用一个更简单的替换,但我想最后一次尝试看看这是否可以解决 .

谢谢!

1 回答

  • 1

    你是如何将 CustomImage 实例添加到项目视图的?

    如果您拖动"Custom View"然后更改类,IB不会将其视为 NSImageView .

    但是,如果你拖出 NSImageView 然后更改类,IB仍然应该像 NSImageView 那样对待它,你应该能够像正常一样绑定它的绑定 . 在这种情况下,您可以将其Value绑定绑定到集合视图项,模型键路径"representedObject.image" .

相关问题