以编程方式创建NSMatrix,Snow Leopard

时间:2009-11-20 17:41:02

标签: objective-c xcode osx-snow-leopard nsmatrix

我正在尝试以编程方式创建NSImageCell原型的NSMatrix(如果您可以通过Interface Builder帮我完成,请回答我here

我创建了一个新的空项目。在其中,普通对象(子类化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”是指定为插座的NSView,连接到Interface Builder中窗口的内容视图。

矩阵根本没有显示。按预期打印以记录帧大小为(0,0,100,100)。

我做错了什么?

正如标题所述,我是在Snow Leopard机器上使用Xcode 3.2.1进行此操作。

1 个答案:

答案 0 :(得分:2)

NSMatrix默认情况下不会绘制任何内容,因为它是NSCells的容器。您可以通过将NSMatrix设置为绘制背景来验证NSMatrix是否已正确添加到视图中。

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

由于NSMatrixNSCell的容器,因此您需要填写一些内容。在您发布的示例中,您可以通过获取与您唯一的行和列对应的单元格并设置图像来执行此操作。

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

另外,请记住,您的矩阵只能显示一个单元格,当您向其添加列和行时,您需要增加其大小。