Странная проблема с NSMenuItem, пользовательским представлением и mouseUp:
У меня очень странная проблема с NSMenu.
Около половины NSMenuItems, которые я использую, имеют свои собственные представления через setView: метод на NSMenuItem. В этом пользовательском представлении я реализовал mouseUp: для отлова, когда пользователь нажимает на элемент меню, и это отлично работает при первом открытии меню.
Во второй раз, однако, mouseUp не вызывается ни по одному из этих пунктов меню, если я удерживаю мышь устойчивой при нажатии. Тем не менее, если я нажму вниз, то слегка сдвину курсор и вызову mouseUp будет вызвано. По какой-то причине что-то перехватывает эти события, но только во второй раз появляется меню, и оно проходит, если курсор перемещается после события mouseDown. (По какой-то причине mouseDown никогда не вызывается, при первом или втором появлении меню).
Кто-нибудь знает, что здесь происходит? Что перехватывает события моей мыши, и почему они передаются в мое пользовательское представление при первом появлении меню, а не во втором?
1 ответ
У меня такая же проблема. Оказывается, проблема заключалась в том, что я запускал внешнее приложение после первого щелчка меню, а когда меню открывалось снова, его окно больше не было ключевым. Добавление этого метода в подкласс NSView, который я использую внутри пунктов меню, решило проблему:
- (void)viewWillMoveToWindow:(NSWindow *)newWindow;
{
[super viewWillMoveToWindow:newWindow];
if ( newWindow != nil && ![newWindow isKeyWindow] )
[newWindow becomeKeyWindow];
[self updateTrackingAreas];
}
Для большего контекста, посмотрите на эту ссылку: http://openradar.appspot.com/7128269