2010-07-20 4 views
1

Я создаю всплывающее меню программно и обновляю его с помощью меню метода делегата менюNeedsUpdate: (NSMenu *), а затем отображая его с помощью popUpMenuPositioningItem: nil atLocation: mouseLoc inView : nil метод.всплывающее меню, вызывающее обновление всех меню при каждом нажатии клавиши

Это нормально работает с управлением мышью. Однако при использовании клавиатуры (буквы или клавиши со стрелками) я заметил, что он вызывает menuNeedsUpdate: для всего, корневое меню и подменю. Это довольно неэффективно и делает использование меню с клавиатуры вялым.

Почему это происходит? Любой способ обойти это или остановить?

ответ

1

Я бы попытался реализовать menuHasKeyEquivalent:forEvent:target:action: на вашем делетете (и всегда возвращаю NO, если вы ничего не знаете в меню, имеет эквивалент ключа).

+0

Блестящий. Это решило. Интересно, однако, я поместил NSLog внутри menuHasKeyEquivalent: forEvent: target: action: метод для отладки, чтобы узнать, вызвана ли она. Ну, он называется так, как я полагаю, поскольку он отлично работает сейчас (не заполняет все меню на каждом нажатии), но NSLog по какой-то причине не подходит. – the979kid

+0

Странно, но я рад, что это сработало! – Wevah