我一直在努力创建一个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上使用一个更简单的替换,但我想最后一次尝试看看这是否可以解决。
谢谢!
答案 0 :(得分:1)
如何将CustomImage
实例添加到项目视图?
如果您在“自定义视图”中拖动然后更改课程,则IB不会将其视为NSImageView
。
但是,如果您拖出NSImageView
然后更改类,IB仍应将其视为NSImageView
,并且您应该能够像正常一样绑定其绑定。在这种情况下,您可以将其Value绑定绑定到集合视图项,模型键路径“representObject.image”。