2012-01-15 12 views
7

W mojej aplikacji Mac, zastąpić i zaakceptować pewnych klawiszy poprzez funkcję keyUp w NSView, który nie jest przeznaczony do zaakceptowania klawiszy.Prevent „niedozwolone” beep po naciśnięcia klawisza w NSView

Gdy przycisk jest wciśnięty, keyUp funkcja jest nazywa, a ja przetworzyć klawiszy, nawet bez wywoływania super keyUp:, i wszystko działa, oprócz tego, że również sprawia, że ​​dźwięk domyślny „doonk”, co dzieje się po naciśnięciu klucz gdzieś nie powinieneś.

Czy istnieje sposób, aby wskazać, że naciśnięcie klawisza było obsługiwane i akceptowane, i że nie potrzebuję sygnału dźwiękowego, aby poinformować użytkownika, że ​​tak nie jest?

Odpowiedz

11

myślę (ale nie jestem 100% pewna, minęło trochę czasu od kiedy to zrobił) trzeba także przesłonić NSView i/lub NSResponderperformKeyEquivalent: metody. Tam zwrócisz YES, aby wskazać dzwoniącemu, że rzeczywiście obsługiwałeś zdarzenie.

I że będzie na bieżąco „dooonk” dźwięk dzieje.

+0

Dzięki! Wystarczy skopiować i wkleić moje "if" z mojej funkcji 'keyUp:' do tego i dodać 'return's. :) – Greg

+0

Czy istnieje sposób na pozbycie się tego dźwięku bez podklasy? –

+0

Chciałbym wyjaśnić, że trzeba umieścić swój kod z 'keyDown:' lub równoważne do 'performKeyEquivalent:' (to ten zastępuje innych metod). Również jeśli używasz metody 'flagsChanged:' do wykrywania kluczy takich jak CMD, musisz dalej używać 'flagsChanged:'. –

0

Zamiast używać keyUp:, można użyć akcji moveUp:, ponieważ eliminuje ona problem związany z określeniem, który klawisz ma obsłużyć. Istnieją również procedury o podobnej nazwie dla downów i różne opcje obsługi ruchów z selekcji, itp.

Aby uzyskać dalszą dokumentację na ten temat, zobacz Cocoa Event-Handling Guide, a w szczególności "Obsługa klawiatury i wstawianie tekstu", gdzie omawia użycie tych poleceń w "Aplikacje inne niż te, które dotyczą tekstu".

W szczególności, druga korzyści przy użyciu tych działań jest to, że unika się problemów z obu kluczy interpretacji lub stosowania specjalnych klawiatur i układów klawiatury.

+0

Cały problem jest, że nie używam 'NSTextView's i obiekty niestandardowe nie są organami tekst, ale rzeczy takie jak obrazy i inne kontrole, i muszę jak klawiszy Delete, Cmd + C, itd., A nie myszy przeciągnij i klawisze strzałek. – Greg

+0

Nie jestem pewien, co NSTextView ma do czynienia z niczym. Używam tej techniki w wielu widokach, które są bezpośrednimi podklasami NSView i działają dobrze. Różne akcje *: akcje są implementowane jako część domyślnego łańcucha odpowiadającego NSView i jestem prawie pewien, że każdy widok, który akceptuje, jest przekazywany tym działaniom. W rzeczywistości mam wiele produktów do wysyłki, które robią to bez widocznego NSTextView. – gaige

+0

Ale różne akcje 'move *:' są tylko dla klawiszy strzałek i potrzebuję innych klawiszy i kombinacji. – Greg

Powiązane problemy