2009-11-20 105 views
3

我試圖創建一個NSImageCell原型編程的NSMatrix(如果你能幫助我通過界面生成器做這件事,是我的客人在回答我here創建NSMatrix編程,雪豹

我創建了一個新的空的項目。在這裏面,一正常對象(子類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)); 
} 

「視圖」是指定爲出口的的NSView,連接到在界面生成的窗口的內容的瀏覽。

矩陣根本不顯示。如預期的那樣,它打印以記錄幀大小(0,0,100,100)。

我在做什麼錯?

正如標題所述,我使用Xcode 3.2.1在Snow Leopard機器上執行此操作。

+0

IB絕對是這樣一個基本案例更容易的方法。我已經回答了你的問題。 – 2009-11-20 17:55:25

+0

太棒了,我看到了。出於好奇 - 你能解決這個問題嗎? :-) – 2009-11-20 18:13:38

回答

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"]]; 

另外,請記住,你的矩陣只有足夠大,以顯示一個單元,併爲您添加行和列到它,你需要增加它的大小。

+0

一旦我設置單元格大小(如我的例子)不應該它至少顯示空的NSImageCells? – 2009-11-21 12:56:09

+0

NSImageCell不會繪製任何東西,除非您在其中設置圖像。 – hallski 2009-11-21 13:56:00