Автоматический стиль / подкрашивание NSToolbarItem

#macos #cocoa #nstoolbar #nstoolbaritem

#macos #cocoa #nstoolbar #nstoolbaritem

Вопрос:

Есть ли способ указать OS X автоматически подкрашивать a NSToolbarItem ?

Я добавил «Элемент панели инструментов изображения» через IB / Xcode и присвоил значку черный цвет в формате PDF, как описано в документации.

Однако мой результат не похож на результат, например, App Store:

введите описание изображения здесь

Я ищу что-то похожее на то, что панель вкладок в iOS делает по умолчанию.

Я новичок в разработке OS X… Поэтому любые рекомендации будут приняты во внимание!

Ответ №1:

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

Это можно сделать в коде с помощью -[NSImage setTemplate:] или, если имена ваших изображений заканчиваются на «Template» (не требуя изменений кода).


Чтобы получить конкретный синий стиль, вы должны установить NSButton без полей в качестве пользовательского представления элемента панели инструментов (вместо того, чтобы это был стандартный элемент). Эта кнопка должна иметь тип, который приводит к отображению ее состояния (например, кнопка переключения с круглой текстурой), и когда она находится в состоянии On, она приобретает синий стиль.

Комментарии:

1. Использовал NSButtons так же, как вы предложили — работает как шарм. Спасибо!

2. Потрясающе! Я пытался скопировать Xcode показать / скрыть навигатор проекта / утилиты и т.д., и это сделало свое дело.

3. Выбор «Template» в раскрывающемся списке Render сам по себе ничего не дает; название изображения действительно должно заканчиваться на «Template».

Ответ №2:

Если вы пытаетесь создать тонированный элемент панели инструментов в коде, вот как я это сделал. Создайте правильный тип кнопки NSButtonTypeToggle затем задайте свойства кнопок, затем добавьте кнопку в пользовательский вид элемента панели инструментов, и, наконец, элемент панели инструментов будет возвращен.

 - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSToolbarItemIdentifier)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {

    // create toolbar items
    NSToolbarItem *toolbarItem = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
    toolbarItem.label = @"title";
    NSImage *iconImage = [NSImage imageNamed:NSImageNameColumnViewTemplate];
    NSButton *button = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 40.0, 40.0)];
    button.title = @"";
    button.image = iconImage;
    [button setButtonType:NSButtonTypeToggle];
    button.bezelStyle = NSBezelStyleTexturedRounded;
    button.action = @selector(toggleColumnView:);
    [toolbarItem setView:button];
    return toolbarItem; 
}