2013-10-03 13 views
7

Potrzebuję obsługi funkcji klawiatury zewnętrznej w mojej aplikacji i potrzebuję kombinacji klawiszy, takich jak Alt + Tab Tab, aby wykryć ją w aplikacji, aby wywołać zdarzenie. W iOS 6 miałem nadpisane funkcja w UIApplication podklasy aby dostać kluczIntegracja zewnętrznej klawiatury Bluetooth w systemie IOS 7

- (void)sendEvent:(UIEvent *)anEvent; 

naciśnięciu kombinacji na klawiaturze zewnętrznej.

Ale teraz testuję swoją aplikację w IOS 7, a sendEvent nawet nie wydaje się być wywoływany dla żadnego naciśniętego klawisza zdarzenia.

Wszelkie rozwiązania ..?

Odpowiedz

18

Istnieje 100% obsługiwany sposób obsługi skrótów klawiaturowych na klawiaturze Bluetooth w systemie iOS 7 przy użyciu nowej klasy UIKeyCommand i łańcucha UIResponder. I did blog about this, ale tutaj jest sedno:

Gdzieś w łańcuchu odpowiadającego dodać metodę keyCommands zwracającej tablicę UIKeyCommand obiektów:

- (NSArray *)keyCommands { 
    UIKeyCommand *commandF = [UIKeyCommand keyCommandWithInput:@"f" modifierFlags:UIKeyModifierCommand action:@selector(handleCommandF:)]; 
    return @[commandF]; 
} 

Potem, kiedy ⌘F jest wciśnięty (w widoku tekstowym) Sieć respondentów będzie szukać tej metody. Jeśli istnieje wiele definicji, użyje najbardziej ciasnego zakresu (np. Sam widok ma pierwszeństwo nad ViewControllerem).

Należy zauważyć, że działa to tylko wtedy, gdy dane wejściowe (takie jak UITextField lub UITextView) są pierwszą odpowiedzią. Jeśli chcesz używać skrótów "globalnych" w swojej aplikacji, możesz zrobić sztuczkę, ukrywając ekran poza ekranem i skupić się na nim.

+1

Brakuje] (zamykający nawias kwadratowy) w ostatnim wierszu. – Klaas

+0

Dzięki! (dopełnienie dla SO) – swilliams

+2

Nie potrzebujesz koniecznie UITextField. Możesz utworzyć niestandardową podklasę UIView, która zwraca TAK dla canBecomeFirstResponder :, a następnie umieść ten niestandardowy widok w hierarchii widoku i ustaw go jako pierwszą odpowiedź. – lucius

Powiązane problemy