カスタム ビューを持つ 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 でより単純な代替品の 1 つを使用することですが、これが最初に解決可能かどうかを最後に確認したいと思います。
ありがとう!