2

プログラムで NSImageCell プロトタイプの NSMatrix を作成しようとしています (Interface Builder を介してそれを行うのを手伝っていただける場合は、ここで私に答えてください)

新しい空のプロジェクトを作成しました。その中で、通常のオブジェクト (NSObject をサブクラス化) には次のコード (およびこのコードのみ) があります。

- (void) awakeFromNib {
    NSRect f = view.bounds;
    NSMatrix* matrix = [[NSMatrix alloc] initWithFrame:f mode:NSListModeMatrix cellClass:[NSImageCell class] numberOfRows:1 numberOfColumns:1];

    [matrix setCellSize:NSMakeSize(100, 100)];
    [matrix sizeToCells];
    [matrix setNeedsDisplay:YES];

    [view addSubview:[matrix autorelease]];

    [view setNeedsDisplay:YES];

    NSLog(@"Matrix frame: %@", NSStringFromRect(matrix.frame));
}

「view」は、Interface Builder の Window の Content View に接続された、アウトレットとして指定された NSView です。

マトリックスはまったく表示されません。予想どおり、フレーム サイズが (0,0,100,100) であることをログに出力します。

私は何を間違っていますか?

タイトルが示すように、Xcode 3.2.1 を使用して、Snow Leopard マシンでこれを行っています。

4

1 に答える 1

2

はNSCellのNSMatrixコンテナであるため、デフォルトでは何も描画しません。背景を描画するように設定することで、NSMatrixがビューに正しく追加されていることを確認できます。

[matrix setBackgroundColor:[NSColor blueColor]];
[matrix setDrawsBackground:YES];

NSMatrixはコンテナなので、NSCell何かを入れる必要があります。投稿した例では、唯一の行と列に対応するセルをフェッチして画像を設定することでこれを行うことができます。

NSImageCell *cell = (NSImageCell *)[matrix cellAtRow:0 column:0];
[cell setImage:[NSImage imageNamed:@"image.jpg"]];

また、マトリックスは1つのセルを表示するのに十分な大きさであり、列と行を追加するときにそのサイズを大きくする必要があることに注意してください。

于 2009-11-21T10:26:52.543 に答える