Я имею NSMenu
это содержит NSMenuItems
с пользовательскими представлениями. Я хочу это так, чтобы, когда кнопка высокого звука нажимается, пункты меню изменили бы часть своего взгляда (посредством их представления). Я нашел setAlternative
в NSMenuItem
документы, однако, на практике я мог только заставить это работать с NSMenuItems
без пользовательских представлений. Как только я установил пользовательское представление, все пункты меню будут отображены. Кроме того, я пытался получить события нажатия клавиши, в то время как меню было открыто. Из-за другого цикла выполнения, NSApplication's sendEvent:
не получает события, пока меню не будет закрыто. Поэтому я не могу только прервать входящее событие.
Кто-либо знает, как я могу быть уведомлен, ли через делегацию или разделение на подклассы, того, когда клавиша Alt нажимается, когда меню открыто?
Вы должны установить объект как делегат своего меню, а затем реализовать метод делегата -menu: updateItem: atIndex: shouldCancel:
.
Это позволит вам изменить состояние вашего пользовательского представления перед отображением пункта меню на основе текущего состояния модификатора.
Вы можете получить текущие модификаторы, запросив [[NSApp currentEvent] modifierFlags]
.
Если вам нужно получать уведомление, если флаги модификатора меняются, пока ваше меню открыто, реализуйте метод -flagsChanged:
в своем пользовательском представлении:
- (void)flagsChanged:(NSEvent*)event
{
if ([event modifierFlags] & NSAlternateKeyMask) // check for option key
{
//do something
}
else
{
//do something else
}
}