Метод «Почувствуй себя в темноте»
Все теги XML относятся к свойствам или методам NSButton
. Некоторые из них являются пользовательскими настройками, например frame
. Другие являются значениями по умолчанию (как, например, использование системного шрифта), в этом случае вам не нужно явно устанавливать их. Обратите внимание, что есть также несколько различных объектов - NSButtonCell
является частью этого микса (объект buttonCell
XML). Вам не нужно создавать это отдельно, но здесь вы найдете некоторые свойства. Вы бы сделали что-то вроде этого:
frame = NSMakeRect(126, 9, 250, 32); // x, y, width height
myButton = [[NSButton alloc] initWithFrame:frame];
myButton.translatesAutoresizingMaskIntoConstraints = NO;
myButton.title = @"Disable";
myButton.bezelStyle = NSBezelStyleRounded;
myButton.alignment = NSTextAlignmentCenter;
myButton.imageScaling = NSImageScaleProportionallyDown; // default value
...
Это не полное воспроизведение, но вы должны понять. Обратите внимание, что некоторые из этих свойств определены в NSButton
, а другие (например, alignment
) определены в суперклассе, например NSControl
.
The Cocoa Way
То есть один способ сделать это. Еще одно решение «Какао» - создать файл XIB с помощью одной кнопки и настроить его по своему вкусу. Затем, когда вам понадобится его копия, загрузите XIB и возьмите его:
NSButton *myButton;
NSArray *topLevelObjects;
[[NSBundle mainBundle] loadNibNamed:@"MyCustomButton"
owner:self
topLevelObjects:&topLevelObjects];
for (id a in topLevelObjects) {
if ([a isKindOfClass:NSView.class]) {
myButton = a;
break;
}
}
Если вы поместите только одну кнопку в XIB, вам не понадобится выделенный контроллер. Приведенный выше код загружает XIB, затем захватывает первый найденный NSView
, который является вашей кнопкой. Мне нравится этот метод гораздо больше, чем описанный выше, поскольку а) вам не нужно декодировать XML в серию операторов кода, б) вы можете изменить свойства кнопки в Интерфейсном Разработчике в любое время и c ) после того, как вы загрузили кнопку, вы можете сделать ее копию.