Создание NSMatrix программно, Snow Leopard

Я пытаюсь создать NSMatrix прототипа NSImageCell программно (если вы можете помочь мне сделать это через 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));
}

"Представление" - это NSView, указанный как выход, подключенный к Представлению содержимого окна в Интерфейсном Разработчике.

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам