Странная проблема с 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

Другие вопросы по тегам