我一直在努力尝试创建一个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 回答
你是如何将
CustomImage
实例添加到项目视图的?如果您拖动"Custom View"然后更改类,IB不会将其视为
NSImageView
.但是,如果你拖出
NSImageView
然后更改类,IB仍然应该像NSImageView
那样对待它,你应该能够像正常一样绑定它的绑定 . 在这种情况下,您可以将其Value绑定绑定到集合视图项,模型键路径"representedObject.image" .