2014-02-08 1 views
2

Я хочу реализовать группу радио с иконками, представляющими себя. И я нашел в документации от apple:Как реализовать радиостанцию ​​значков?

Иконка Radio Buttons

Вы также можете иметь кнопку радио, что это кнопка значок; то есть тот, который в первую очередь определяется его значком и имеет мало или вообще не имеет текста. Если кнопка выключена, она, похоже, встает. Если кнопка включена, она, кажется, нажата. (Кнопка значка не может отображать смешанное состояние.)

Вы можете создать группу переключателей значков в любом Интерфейс Builder или программно. Если вы используете Interface Builder, начните с матрицы кнопок. Если вы создаете его программно, создайте матрицу кнопок. Затем измените режим отслеживания матрицы на NSRadioModeMatrix. Измените типы кнопок на NSPushOnPushOffButton, их позиции изображения на NSImageOnly, их типы без полей на квадратный тип рамки. Наконец, установите их изображения на то, что вы хотите.

Итак, я написал следующий код:

// self.matrix is bound in IB whose tracking mode is NSRadioModeMatrix 
NSArray *cellArray = [self.matrix cells]; 
// Set the button type to NSPushOnPushOffButton 
[[cellArray objectAtIndex:0] setButtonType:NSPushOnPushOffButton]; 
// Set image position to NSImageOnly 
[[cellArray objectAtIndex:0] setImagePosition:NSImageOnly]; 
// Set bezel type to square bezel type 
[[cellArray objectAtIndex:0] setBezelStyle:NSThickSquareBezelStyle]; 
// Finally set the image 
[[cellArray objectAtIndex:0] setImage:[NSImage imageNamed:@"ImageA"]]; 
// Do it all over again 
[[cellArray objectAtIndex:1] setButtonType:NSPushOnPushOffButton]; 
[[cellArray objectAtIndex:1] setImagePosition:NSImageOnly]; 
[[cellArray objectAtIndex:1] setBezelStyle:NSThickSquareBezelStyle]; 
[[cellArray objectAtIndex:1] setImage:[NSImage imageNamed:@"DensityMax"]]; 

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

enter image description here

Так что я делаю неправильно? Пожалуйста, укажите это для меня, большое спасибо!

+0

Обновленный мой ответ с тем, что я думаю, что вам не хватает – markhunte

ответ

1

UPDATE *

Если я не делаю это полный программно и сделать это, как вы есть.

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

[[cellArray objectAtIndex:0] setBordered:YES]; 

Создания Матрицы полностью программно-видимому, не нужна граница, установленное вами:

NSRect windowContentViewRect = NSMakeRect(_cView.frame.origin.x +10, _cView.frame.origin.y+150, _cView.frame.size.width, _cView.frame.size.height); 
NSMatrix* matrix = [[NSMatrix alloc] initWithFrame:windowContentViewRect mode:NSTrackModeMatrix cellClass:[NSButtonCell class] numberOfRows:2 numberOfColumns:1]; 

[matrix setCellSize:NSMakeSize(100, 100)]; 
[matrix sizeToCells]; 
[matrix setNeedsDisplay:YES]; 

[_cView addSubview: matrix ]; 

[_cView setNeedsDisplay:YES]; 

NSArray *cellArray = [matrix cells]; 
// Set the button type to NSPushOnPushOffButton 
[[cellArray objectAtIndex:0] setButtonType:NSPushOnPushOffButton]; 
// Set bezel type to square bezel type 
[[cellArray objectAtIndex:0] setBezelStyle:NSThickSquareBezelStyle]; 
// Set image position to NSImageOnly 
[[cellArray objectAtIndex:0] setImagePosition:NSImageOnly]; 

// Finally set the image 
[[cellArray objectAtIndex:0] setImage:[NSImage imageNamed:@"ImageA"]]; 


// Do it all over again 
[[cellArray objectAtIndex:1] setButtonType:NSPushOnPushOffButton]; 
[[cellArray objectAtIndex:1] setBezelStyle:NSThickSquareBezelStyle]; 
[[cellArray objectAtIndex:1] setImagePosition:NSImageOnly]; 

[[cellArray objectAtIndex:1] setImage:[NSImage imageNamed:@"DensityMax"]]; 

enter image description here

+0

Большое спасибо, это помогло мне! Почему яблоко не упоминает об этом. –