1

私はNSArrayカスタムのを持っていますNSObjects。各オブジェクトには、いくつかのプロパティと、グリッド ビューに表示したい画像があります。NSMatrix は私の問題に対する適切な解決策のようですが、オブジェクトのコンテンツを表示する際に問題が発生しています。

注意すべきことがいくつかあります。

  1. コアデータを使用していない
  2. 私はプログラムでこれをやろうとしています
  3. 使用を検討しNSCollectionViewましたがNSMatrix、この場合はより良い解決策のようです
  4. すべてのセルは互いに同じ表示形式に従います。つまり、異なるセルに異なるタイプのオブジェクトを渡したくありません。オブジェクトの異なるインスタンスだけを渡します。

ウィンドウにNSView(matrixContainerView) があるとします。コントローラー ファイルには、IBOutletto matrixContainerView があります。私のコントローラーでは、awakeFromNibに次のものがあります。

    NSMatrix* matrix = [[NSMatrix alloc] 
                          initWithFrame:[matrixContainerView bounds]
                                   mode:NSRadioModeMatrix 
                              cellClass:[MyCustomCell class] 
                           numberOfRows:5
                        numberOfColumns:5];

    [matrix setCellSize:NSMakeSize(116, 96)];
    [matrix setNeedsDisplay:YES];

    [matrixContainerView addSubview:[matrix autorelease]];

    [matrixContainerView setNeedsDisplay:YES];

クラスMyCustomCellヘッダーは次のようになります。

@interface MyCustomCell : NSCell {

    MyModel * theObject;

}

-(MyModel *)theObject;
-(void)setTheObject:(MyModel *)newValue;

実装ファイルは次のとおりです (図は簡略化されています)。

@implementation MyCustomCell

-(void)drawInteriorWithFrame:(NSRect)theFrame inView:(NSView *)theView {

    ...drawing code using MyModel e.g. [MyModel isValid] etc...

}

-(MyModel *)theObject {
    return theObject;
}

-(void)setTheObject:(MyModel *)newValue {
    [theObject autorelease];
    theObject = [newValue retain];
}

@end

コントローラー内のオブジェクトを含む配列の初期化と設定の後、オブジェクトのインスタンスを設定MyModelしたいと思いNSMatrixます。

どうすればいいですか?

次のように、配列から2つのオブジェクトだけを追加しようとしました(テストとして):

MyCustomCell * cellOne = (MyCustomCell *)[matrix cellAtRow:0 column:0];
[cell setTheObject:[myArrayOfObjects objectAtIndex:0]];

MyCustomCell * cellTwo = (MyCustomCell *)[matrix cellAtRow:0 column:1];
[cellTwo setTheObject:[myArrayOfObjects objectAtIndex:1]];

しかし、これは最初のオブジェクト イメージを作成するだけです。上記が機能した場合、配列を列挙してオブジェクトを追加するのは簡単な作業でした。

セルを追加し、適切なオブジェクトをそれらのセルに渡して正しく表示するにはどうすればよいですか?

Appleのドキュメントは、プログラミング ガイドに関する限り、NSMatrix については控えめに言ってもまばらです。そこにある情報は私にとって非常に役に立ちますが、それはオブジェクトを追加して表示させた後でのみです!

アップデート

(上記の例のように) 2 つのオブジェクトを追加しない場合、出力は同じです。つまり、カスタム セルの 1 つの表現が画面に描画されます。これは、私が見ている単一の表現がマトリックスの初期化時に行われており、実際には列0行0に何も描画していないと思っていたことを示しています。それは今私をもっと混乱させます。

4

1 に答える 1

0

マトリックスには実際には 2 つのセルがありますが、フレームが小さすぎて表示できないのではないでしょうか? セルを追加した後、呼び出してみてください[matrix sizeToCells]

于 2010-08-12T00:04:07.217 に答える