我一直在努力尝试创建一个具有一组 NSCollectionViewItems 和自定义视图的 NSCollectionView。当项目视图上的控件是标准 AppKit 控件时,代码可以正常工作,但是一旦我添加了自定义 NSView,就无法从 Interface Builder 绑定它。
花几个小时在互联网上搜索,似乎有很多选择可以解决这个问题,但似乎都很专业。是否有一些简单的示例代码演示了如何在项目视图上给定一个 CustomImage * 来在该自定义视图上设置图像属性?
为每个项目提供数据的模型是:
@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;
但这只是在绑定调用中爆炸,出现“名称”不存在的错误。
从理论上讲,这应该是一件非常简单的事情,但我找到的答案都没有说明这一点。另一种方法是放弃 NSCollectionView 并使用 GitHub 上更简单的替代品之一,但我想最后一次尝试看看这是否可以首先解决。
谢谢!