Особая зона NSToolbar - PullRequest
       7

Особая зона NSToolbar

2 голосов
/ 14 августа 2011

Мне нравится пытаться полностью захватить область, где находится NSToolbar, чтобы я мог устанавливать свои собственные элементы управления, представления и фон. Преимущества использования этой области:

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

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

Мой текущий метод заключается в использовании недокументированного метода _toolbarView с NSToolbar и добавлении моего пользовательского представления в его подпредставления. Это прекрасно работает, так как я могу отключить настройку панели инструментов. К сожалению, размер панели инструментов инициализируется с элементами в этой панели инструментов. Кто-нибудь знает, могу ли я изменить размер панели инструментов без добавления фальшивого ToolbarItem?

Может быть, есть и лучший способ сделать это, о котором я сейчас не знаю. Спасибо за любые предложения и комментарии.

1 Ответ

4 голосов
/ 15 августа 2011

Нет необходимости использовать недокументированные API.Просто создайте элемент панели инструментов с настраиваемым представлением:

- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {
    NSToolbarItem *item = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier] autorelease];
    …
    [item setView:myCustomToolbarView];
    …
}

Вы можете контролировать размер своей настраиваемой панели инструментов, используя свойства элемента minSize и maxSize (например, в ваших NSWindowDelegate '* -windowDidResize:)..

Не забудьте также обновить режим отображения панели инструментов, чтобы он не отображал метки элементов:

[toolbar setDisplayMode: NSToolbarDisplayModeIconOnly];
...