Ответ 1
Я не знаю, можно ли это сделать со стандартным элементом строки состояния. Использование пользовательского представления для меню очень легко.
Создайте элемент состояния с настраиваемым представлением:
item = [[NSStatusBar systemStatusBar] statusItemWithLength:thickness];
view = [[CustomView alloc] initWithFrame:(NSRect){.size={thickness, thickness}}];
[item setView:view];
Ваше пользовательское представление должно обнаруживать щелчки мыши:
- (void)mouseDown:(NSEvent *)event {
...
}
И, наконец, в какой-то момент после обнаружения щелчка мыши отобразите/скройте popover.
if (/* menulet is active */) {
[popover showRelativeToRect:/* menulet view frame */
ofView:/* menulet view */
preferredEdge:NSMinYEdge];
} else {
[popover performClose:nil];
}
Вам нужно бит NSWindow swizzling, чтобы получать текстовые поля внутри popover.
Я подготовил минимальный проект Xcode с этими идеями и некоторым клеем: PopoverMenulet. p >