2009-11-20 1 views
3

Я пытаюсь создать NSMatrix из прототипа NSImageCell программно (если вы можете помочь мне сделать это с помощью Interface Builder, мой гость, отвечая мне here)Создание NSMatrix программно, Snow Leopard

Я создал новый, пустой проект. В ней нормальный объект (подклассов 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 указано, как выход, подключенный к Content Вид окна в Interface Builder.

Матрица не отображается вообще. Он печатает для регистрации, что размер кадра (0,0,100,100), как и ожидалось.

Что я делаю неправильно?

Как указано в заголовке, я делаю это на машине Snow Leopard, используя Xcode 3.2.1.

+0

IB - это, безусловно, более простой способ найти базовый случай, подобный этому. Я ответил на этот вопрос. –

+0

Отлично, я видел. Из любопытства сейчас - можете ли вы решить это? :-) –

ответ

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

Кроме того, имейте в виду, что ваша матрица является только достаточно большим, чтобы показать одну ячейку и по мере добавления столбцов и строк в ней нужно увеличить его размер.

+0

Как только я установил размер ячейки (как в моем примере), не должен ли он хотя бы показать пустой NSImageCells? –

+0

NSImageCell ничего не рисует, если вы не установили в нем изображение. – hallski