2013-02-25 3 views
8

Ich habe ein sehr, sehr seltsames Problem hier mit einem NSMenu.Weird Problem mit NSMenuItem, benutzerdefinierte Ansicht und mouseUp:

Etwa die Hälfte der NSMenuItems, die ich verwende, haben benutzerdefinierte Ansichten über sie durch die setView: -Methode auf NSMenuItem. In dieser benutzerdefinierten Ansicht habe ich mouseUp implementiert: um zu fangen, wenn der Benutzer auf den Menüeintrag klickt, und dies funktioniert perfekt beim ersten Öffnen des Menüs.

Beim zweiten Mal wird mouseUp bei keinem dieser Menüpunkte aufgerufen, wenn ich die Maus beim Klicken festhalte. Wenn ich jedoch nach unten klicke, dann bewege den Cursor ein wenig und lasse die Maustaste los. Aus irgendeinem Grund fängt etwas diese Ereignisse ab, aber nur das zweite Mal, wenn das Menü erscheint, und es kommt durch, wenn sich der Cursor nach dem mouseDown-Ereignis bewegt. (Aus irgendeinem Grund wird mouseDown jedoch niemals beim ersten oder zweiten Erscheinen des Menüs aufgerufen).

Wer hat Ahnung, was hier vor sich geht? Was fängt meine Mausereignisse ab und warum werden sie beim ersten Erscheinen des Menüs in meine benutzerdefinierte Ansicht übertragen, aber nicht bei der zweiten?

+0

auch durch geht, wenn ich Doppelklick (mouseUp wird dann zweimal aufgerufen) beim zweiten Aufrufen des Menüs. –

+0

Also muss ich NSTextViews über diese Ansicht. Diese werden mouseDown, aber sie beginnen auch gleichzeitig mit ihrer Superview zu versagen. Es ist fast so, als würde etwas über dem NSMenu die Mausereignisse abfangen. –

Antwort

3

Ich hatte das gleiche Problem. Es stellte sich heraus, dass ich nach dem ersten Klick auf das Menü eine externe Anwendung gestartet hatte. Wenn das Menü wieder geöffnet wurde, war das Fenster nicht länger der Schlüssel. Addiert man diese Methode, um die NSView Unterklasse I'n innerhalb der Menüpunkte das Problem behoben:

- (void)viewWillMoveToWindow:(NSWindow *)newWindow; 
{ 
    [super viewWillMoveToWindow:newWindow]; 

    if (newWindow != nil && ![newWindow isKeyWindow]) 
     [newWindow becomeKeyWindow]; 

    [self updateTrackingAreas]; 
} 

Weitere Zusammenhang haben einen Blick auf diesen Link: http://openradar.appspot.com/7128269