iOS: How to detect the escape/control keys on a hardware bluetooth keyboard?

后端 未结 3 1654
南方客
南方客 2021-02-04 00:41

I\'m trying to figure out how to detect that the Escape (and other key combinations like Ctrl and alt) have been pressed on a bluetooth keyboard attached to an iOS device.

3条回答
  •  一向
    一向 (楼主)
    2021-02-04 01:08

    AFAIK this is not possible using public API. I've done a bit of searching and the esc key is not recognized. The only thing that I didn't do is to try iSSH (it costs 9€ :-), but if you read the description on the AppStore it seems clear that ESC key on a hardware (bluetooth) keyboard doesn't work:

    • Exhaustive key configuration support. Has arrow keys (by pop-up or by toolbar). ctrl, alt, esc, tab, shift, Fn keys (1-10), ` key, PgUp, PgDown and for those keys not listed provides multiple means to add them.

    • Bluetooth keyboard support for arrow keys, function keys and a remapping of the ctrl key through option key mapping in either X11/VNC server or terminal. When enabled, an Option+key press maps to equivalent Ctrl+key press.

    As you can see, in the second line the ESC key is not mentioned. Moreover, I've found this (old) post.

    EDIT:

    As your last updates, I've found a way to "hide" the _gsEvent inside the binary. I don't know if Apple static analyser can find it, however. The trick is simple...create the _gsEvent selector (and other private selectors) at runtime!

    -(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;
    }
    

    I've tried to search inside the binary and I don't find the _gsEvent keyword, obviously because it's created only at runtime.
    Hope this helps.

提交回复
热议问题