2013-02-25 17 views
8

Mam tutaj bardzo dziwny problem z NSMenu.Dziwny problem z NSMenuItem, niestandardowym widokiem i mouseUp:

Około połowa elementów NSMenuItems, których używam, ma niestandardowe widoki na nich za pomocą metody setView: na NSMenuItem. W tym niestandardowym widoku zaimplementowałem mouseUp: do przechwytywania, gdy użytkownik kliknie na element menu, i działa to doskonale przy pierwszym otwarciu menu.

Po raz drugi mysz nie zostanie wywołana w żadnym z tych elementów menu, jeśli przytrzymam mysz nieruchomo po kliknięciu. Jeśli jednak kliknę w dół, przesuń nieco lekko kursor i zwolnij wywołanie myszy. Z jakiegoś powodu coś przechwytuje te zdarzenia, ale tylko za drugim razem pojawia się menu i przechodzi, jeśli kursor przesunie się po zdarzeniu mouseDown. (Z jakiegoś powodu mouseDown nigdy nie jest wywoływany, w pierwszym lub drugim wyglądzie menu).

Ktoś ma pojęcia, co się tutaj dzieje? Co przechwytuje zdarzenia myszy i dlaczego przechodzą one do mojego widoku niestandardowego przy pierwszym wyświetleniu menu, ale nie na drugim?

+0

również przechodzi gdybym dwukrotne kliknięcie (następnie mouseUp zostanie wywołany dwukrotnie) przy drugim wyświetleniu menu. –

+0

Więc muszę NSTextViews na górze tego widoku. Otrzymują one mouseDown, ale również zaczynają działać w tym samym czasie, co ich superview. To prawie tak, jakby coś było na wierzchu NSMenu przechwytującego zdarzenia myszy. –

Odpowiedz

3

Miałem ten sam problem. Okazało się, że uruchomiłem zewnętrzną aplikację po pierwszym kliknięciu menu, a kiedy menu zostało ponownie otwarte, jego okno przestało być kluczowe. Dodanie tej metody do podklasy NSView I'n użyciu wewnątrz elementów menu Naprawiono problem:

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

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

    [self updateTrackingAreas]; 
} 

Więcej kontekście, zajrzyj pod tym linkiem: http://openradar.appspot.com/7128269