Альтернативные пункты меню в NSMenu

Я имею NSMenu это содержит NSMenuItems с пользовательскими представлениями. Я хочу это так, чтобы, когда кнопка высокого звука нажимается, пункты меню изменили бы часть своего взгляда (посредством их представления). Я нашел setAlternative в NSMenuItem документы, однако, на практике я мог только заставить это работать с NSMenuItems без пользовательских представлений. Как только я установил пользовательское представление, все пункты меню будут отображены. Кроме того, я пытался получить события нажатия клавиши, в то время как меню было открыто. Из-за другого цикла выполнения, NSApplication's sendEvent: не получает события, пока меню не будет закрыто. Поэтому я не могу только прервать входящее событие.

Кто-либо знает, как я могу быть уведомлен, ли через делегацию или разделение на подклассы, того, когда клавиша Alt нажимается, когда меню открыто?

7
задан Justin Boo 17 May 2012 в 19:16
поделиться

1 ответ

Вы должны установить объект как делегат своего меню, а затем реализовать метод делегата -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
    }
}
6
ответ дан 7 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: