带有自定义视图的NSCollectionViewItem

时间:2014-10-06 15:22:25

标签: macos cocoa nscollectionview nscollectionviewitem

我一直在努力创建一个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 个答案:

答案 0 :(得分:1)

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

如果您在“自定义视图”中拖动然后更改课程,则IB不会将其视为NSImageView

但是,如果您拖出NSImageView然后更改类,IB仍应将其视为NSImageView,并且您应该能够像正常一样绑定其绑定。在这种情况下,您可以将其Value绑定绑定到集合视图项,模型键路径“representObject.image”。