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" 是一个指定为插座的 NSView,连接到 Interface Builder 中窗口的内容视图。

矩阵根本不显示。正如预期的那样,它打印以记录帧大小为(0,0,100,100)。

我究竟做错了什么?

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

4

1 回答 1

2

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

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

由于它NSMatrix是一个容器,因此NSCell您需要用一些东西填充它们。在您发布的示例中,您可以通过获取与您唯一的行和列对应的单元格并设置图像来执行此操作。

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

另外,请记住,您的矩阵仅大到足以显示一个单元格,并且当您向其中添加列和行时,您需要增加其大小。

于 2009-11-21T10:26:52.543 回答