2011-08-20 18 views
5

All, Mam podklasę NSBox i mam subviews w nim jak etykietę i dwa obrazki. Zastąpiłem w nim menuForEvent:. Jednak po kliknięciu na NSBox, aby go wybrać, a następnie później Control + Kliknij na którejkolwiek z jego subviews, a następnie menuForEvent: nigdy nie jest wywoływana.Control + Kliknij, aby nie uruchamiać menuForEvent

Nie rozumiem, dlaczego tak jest.

+0

Mam to samo w tabeli ... dam znać, co znajdę. –

Odpowiedz

1

Trzeba wdrożyć menuForEvent: w subviews też, i przekazania wydarzenie do Superview'S (NSBox podklasy) realizację menuForEvent:

- (NSMenu *)menuForEvent:(NSEvent *)event 
{ 
    return [[self superview] menuForEvent:event]; 
} 

Przypuszczałem, że to automatycznie spadają aż do SuperView bez potrzeba podklasy subviews. Zauważyłem, że kliknięcie prawym przyciskiem powoduje, ale z jakiegoś powodu kliknięcie kontrolne nie.

+0

To faktycznie rozwiązuje problem bezboleśnie, dzięki! – duncanwilcox

4

Istnieje różnica w sposobie obsługi kliknięć kontrolnych i kliknięć prawym przyciskiem myszy przez NSView (jak wskazał jfewtr). Menu kontekstowe pojawi się w przypadku kliknięcia prawym przyciskiem myszy , jeśli kliknięcie wchodzi w zakres widoku podrzędnego, ale nie w przypadku kliknięcia z wciśniętym klawiszem Control .

Byłem zaskoczony tym i faktycznie napisał post o niej z większą ilością szczegółów tutaj: NSView control-click quirks

Istnieje kilka potencjalnych rozwiązań, ale nadrzędnym/dostosowywania całe drzewo podrzędny nie jest prawdopodobnie najlepszym wyborem. Znalazłem najlepszą poprawkę na to, aby wyświetlić menu kontekstowe bezpośrednio w widoku najwyższego poziomu (podklasie NSBox) do sterowania kliknięcie:

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    if (theEvent.modifierFlags & NSControlKeyMask) 
    { 
     [NSMenu popUpContextMenu:[self menuForEvent:theEvent] withEvent:theEvent forView:self]; 
    } 
} 

Chociaż to nie jest wielki hardcode ten problem, należy go unika manipulowania lub przechodzenia przez całe drzewo z podzakresu, co może wiązać się z bardziej problematycznymi efektami ubocznymi/błędami.

Powiązane problemy