2013-02-09 8 views
22

Próbuję dowiedzieć się, jak wykryć, że Escape (i inne kombinacje klawiszy, takie jak Ctrl i alt) zostały naciśnięte na klawiaturze Bluetooth dołączonej do urządzenia iOS.iOS: Jak wykryć klawisze escape/control na sprzętowej klawiaturze Bluetooth?

Niektóre odpowiedzi sugerują, że nie jest to możliwe. Istnieją jednak aplikacje w Appstore, które to robią (na przykład iSSH), więc zakładam, że jest to możliwe przy użyciu publicznych interfejsów API.

Próbowałem już tworzyć własne UITextInput, ale nic nie otrzyma po naciśnięciu klawisza Escape. Jedyną częścią interfejsu API, którą widzę, na którą może odpowiedzieć iPad, jest funkcja VoiceOver (Escape działa tak samo jak w Safari), więc zastanawiam się, czy jest jakiś sposób, za pośrednictwem interfejsu API dostępności?

Próbowałem również sprawdzić, czy jest coś, co mogę obserwować z NSNotificationCenter, co może pomóc, ale jeszcze nie znalazłem niczego.

Propozycje są mile widziane, odrabiam na ten temat cały dzień, a teraz jestem trochę zagubiony.

+0

Złożyłem zgłoszenie błędu radaru na temat niejasnej dokumentacji lub brakującej funkcji, która została oznaczona jako duplikat 7649186, który został oznaczony jako zamknięty. – new299

Odpowiedz

6

Brak publicznych interfejsów API dla celów, które zamierzasz wykonać, więc może to doprowadzić do odrzucenia.

Jeśli chcesz zaryzykować, możesz spróbować this. Zasadniczo przechwytuje wszystkie zdarzenia wysyłane do Twojej aplikacji, zastępując sendEvent: swoim UIApplication.

+1

Tak, tak, w moim przypadku doprowadziło to do odrzucenia. Nadal zastanawiam się, jak to robią aplikacje istniejące w AppStore. – new299

+1

Czasami to zależy od recenzenta, jeśli Twoja aplikacja trafia do AppStore, czy nie ... Może twórca tej aplikacji miał więcej szczęścia. – Daniel

+0

Tak, jestem ciekawy. Właściwie odrzucili to za używanie _gsEvent, co powoduje, że myślę, że było oparte na jakiejś statycznej analizie. To dziwne, że IainSmith nie mógł znaleźć odniesienia do _gsEvent w pliku binarnym. Ponownie przesłałem aplikację bez elementów _gsEvent i spróbuję ponownie to zrobić później. – new299

5

AFAIK nie jest to możliwe przy użyciu publicznego interfejsu API. Zrobiłem trochę wyszukiwania i klucz esc nie został rozpoznany. Jedyne, czego nie zrobiłem, to wypróbować iSSH (kosztuje to 9 € :-), ale jeśli czytasz opis w AppStore, wydaje się jasne, że klucz ESC na klawiaturze sprzętowej (bluetooth) nie praca:

  • Wyczerpująca obsługa konfiguracji klucza. Ma strzałki klawiszy (pop-up lub przez pasek narzędzi). Ctrl, alt, esc, zakładka, przesunięcie, Fn klucze (1-10) ` klucz PgUp, PgDown i dla tych kluczy niewymienione zapewnia wiele sposobów na ich dodanie.

  • wsparcie klawiatura Bluetooth dla strzałka klawiszy funkcyjnych, klucze i manipulowanie ctrl klucza poprzez opcję mapowania klucza w dowolnym serwerze X11/VNC lub terminala. Gdy włączone, Opcja + klucz naciśnij mapy do analogicznego Ctrl + klucz prasowej.

Jak widać, w drugiej linii ESC klucz jest nie wspomniano. Co więcej, znalazłem to (stare) post.

EDIT:

W swoich ostatnich aktualizacjach, Znalazłem sposób, aby "ukryć" THE _gsEvent wewnątrz binarny. Nie wiem jednak, czy analizator statyczny Apple może go znaleźć. Sztuczka jest prosta ... utwórz selektor _gsEvent (i inne selektory prywatne) w czasie wykonywania!

-(void)sendEvent:(UIEvent *)event 
{ 

    SEL aSelector = NSSelectorFromString([self theSelector]); 
    if ([event respondsToSelector:aSelector]) { 

     NSLog(@"Event: %@", event.description); 
    } 

    [super sendEvent:event]; 
} 

-(NSString *)theSelector 
{ 
    // compose the keyword as you prefer 
    NSString *sel = [NSString stringWithFormat:@"%@g%@%@ent", @"_", @"s", @"Ev"]; 
    return sel; 
} 

Próbowałem szukać wewnątrz pliku binarnego i nie znajduję słowa kluczowego _gsEvent, oczywiście, ponieważ jest tworzony tylko w czasie wykonywania.
Mam nadzieję, że to pomoże.

+0

Kupiłem aplikację i klawisz Escape na klawiaturze Bluetooth działa. Działa również w Monitorze. Widziałem, że posty w grupach google publikują, ale jeśli przeglądasz grupę, zobaczysz odniesienia do klawiszy Ctrl i Esc działających na klawiaturze Bluetooth. – new299

+1

Z komputera Mac znajdź plik .app programu iSSH (znajduje się on w folderze iTunes, jeśli nie pobierz go ze sklepu AppStore), kliknij prawym przyciskiem myszy, pokaż zawartość pakietu, a następnie otwórz plik wykonywalny za pomocą edytora szesnastkowego lub po prostu textedit. Jeśli znajdziesz słowo kluczowe "_gsevent", używają one api – LombaX

+1

Nie "_gsevent" w pliku wykonywalnym, ale są rzeczy takie jak "_gs", "_XkbSendNewKeyboardNotify", "_XkbProcessKeyboardEvent_ProcessKeyboardEvent", "_ProcGetKeyboardControl" i "- [iX11ViewController setKeyboardTrigger:] "Nie mam dużego doświadczenia z tym, co pokazuje plik wykonywalny, ale próbuję ci pomóc. –

12

Można to zrobić teraz w iOS 7. Na przykład, aby wdrożyć klawisz Esc, zastępują UITextView i umieścić następujące metody w swojej klasie:

- (NSArray *) keyCommands { 
    UIKeyCommand *esc = [UIKeyCommand keyCommandWithInput: UIKeyInputEscape modifierFlags: 0 action: @selector(esc:)]; 
    return [[NSArray alloc] initWithObjects: esc, nil]; 
} 

- (void) esc: (UIKeyCommand *) keyCommand { 
    // Your custom code goes here. 
} 

Nie trzeba sprawdzić, aby mieć pewność, jesteś na iOS 7, ponieważ wcześniejsze wersje systemu operacyjnego nie wywołają metody keyCommands.