2013-05-17 11 views
9

Używam niestandardowej podklasy NSView i odbieranie zdarzeń klawiatury za pomocą metod keyDown/keyUp, wszystko działa poprawnie, z wyjątkiem sytuacji, gdy naciśnięty jest klawisz "Cmd ⌘", zdarzenia keyDown są wystrzeliwane jak zwykle, ale zdarzenie keyUp nigdy nie nadchodzi.NSResponder nie odbiera zdarzenia KeyUp, gdy przytrzymano klawisz Cmd 01

W naszym przypadku używamy klawiszy strzałek w celu przeniesienia obrazu w lewo/w prawo/w górę/w dół, a jeśli użytkownik przytrzyma "Cmd ⌘", jednocześnie naciskając w lewo/w prawo, obróci obraz. Ponieważ otrzymujemy zdarzenie keyDown, obraz zaczyna się obracać, ale nigdy się nie zatrzymuje, ponieważ keyUp nigdy nie nadejdzie. Inne modyfikatory nie mają tego problemu (np. Jeśli naciśnięcie klawisza Shift, Ctrl lub Alt zostanie przytrzymane podczas naciśnięcia innego klawisza, otrzymamy KeyUp zgodnie z oczekiwaniami). Jedną z opcji jest użycie innego modyfikatora, ale byłoby miło zachować go w zgodności z wersją na PC (Cmd jest używany jako zamiennik, gdy Ctrl jest używany w Windows, zachowuje zgodność ze standardowymi poleceniami kopiowania/wklejania itp.).

Czy ktoś wie, dlaczego to robi? Czuje się jak błąd, ale jest prawdopodobnie dziwnym "poprawnym zachowaniem", wszelkimi pomysłami, jak sobie z nim poradzić (poza użyciem alternatywnego modyfikatora lub używania bezpośredniego dostępu HID).

Dzięki.

+1

To może być możliwe rozwiązanie: http://stackoverflow.com/questions/4001565/missing-keyup-events- na-znaczących-kombinacjach klawiszy-eg-select-till-beginning? rq = 1 Mam ten sam problem. – Bikush

Odpowiedz

1

Można użyć flagsChanged być powiadomiony, gdy klawisze modyfikujące są w dół/w górę:

- (void)flagsChanged:(NSEvent *)theEvent 
{ 
    if (theEvent.modifierFlags & NSCommandKeyMask) { 
     NSLog(@"Command key is down"); 
    } else { 
     NSLog(@"Command key is up"); 
    } 
} 
+0

OP pytał o zdarzenie keyUp dla klawisza wciśniętego w połączeniu z klawiszem polecenia. To zdarzenie keyUp nigdy nie nadchodzi. –

Powiązane problemy