2

個々の NSCollectionViewItem ビューにカスタム描画を持つ NSCollectionView をセットアップしようとしています。各ビューに描画する必要がある画像がありますが、そのビューを Interface Builder の NSCollectionViewItem サブクラスにリンクすることができません。初期化操作を実行するために、NSCollectionViewItem で使用できる init メソッドはありますか? copyWithZone を実装しようとしましたが、何か間違ったことをしていたので、永久ループが発生しました。現在、ビューへの接続を確立する唯一の機会は、-(void)setSelected:(BOOL)flag を使用して選択が変更された後です。ビューで描画を行いたいのですが、ソースとして表現されたオブジェクトからの画像が必要です。私が読んだ NSCollectionView に関連するものはすべて、一見不完全なようです。

@implementation CollectionViewItem
    -(void)setSelected:(BOOL)flag {
        [super setSelected:flag];
        NSLog(@"setSelected: %d", flag);
        // tell the view that it has been selected
        [(CollectionViewItemView* )[self view] setSelected:flag];
        // This is where I pass my image to my view
        [(CollectionViewItemView* )[self view] setOriginalSprite:[(MyModel* )self.representedObject imageSource]];
        [(CollectionViewItemView* )[self view] setNeedsDisplay:YES];
    }
@end
4

2 に答える 2

1

このドキュメントを見つけました - NSCollectionViewItem クラス

私が見つけたものは、参照を次のように設定することを示しています。

Setting the Represented Object

    – representedObject Available in Mac OS X v10.5 through Mac OS X v10.5
    – setRepresentedObject: Available in Mac OS X v10.5 through Mac OS X v10.5 

あなたのサンプル: -(void)setSelected:(BOOL)flag

言語はわかりませんがBOOLIDですか?

setRepresentedObject:

受信者が表すオブジェクトを指定されたモデル オブジェクトに設定します。(Mac OS X v10.5 から Mac OS X v10.5 で使用可能) - (void)setRepresentedObject:(id)object パラメータ

物体

The receiver’s model object.

可用性

Available in Mac OS X v10.5 through Mac OS X v10.5.

NSCollectionView.h で宣言

注:ドキュメントでこれを見ました:

重要: Mac OS X v10.5 では、NSCollectionViewItem クラスのスーパークラスは NSObject でした。Mac OS X v10.6 以降では、NSCollectionViewItem は NSViewController のサブクラスになりました。この変更は、ビューが NSCollectionView 内で複製される方法を改善するために行われました。NSCollectionViewItem は以前の実装とのバイナリ互換性を維持し、アーカイブ解除は正しく処理されます。

したがって、古い API の操作に慣れている場合は、最後にこれを行ってから変更が加えられている可能性があります ...???

于 2011-05-31T23:32:26.090 に答える
1

ビューを Interface Builder の NSCollectionViewItem サブクラスにリンクできません。

CollectionViewItemカスタム ビューの要素を、ファイルの所有者 (クラスは である必要があります) で表されるオブジェクトにバインドする必要があります。たとえば、イメージ ビューはファイルの所有者にバインドされ、モデル キー パスはrepresentedObject.imageSource.

初期化操作を実行するために、NSCollectionViewItem で使用できる init メソッドはありますか?

NSCollectionViewItemのサブクラスですNSViewController。そのため、オーバーライド-loadViewしてカスタム初期化を実行できます。例えば、

@implementation CollectionViewItem
…
- (void)loadView {
    [super loadView];
    self.someProperty = someDefaultValue;
}
…
@end
于 2011-05-31T23:44:19.593 に答える