Создание 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"]];
Кроме того, имейте в виду, что ваша матрица достаточно велика, чтобы отображать только одну ячейку, и по мере добавления к ней столбцов и строк необходимо увеличивать ее размер.