iOS版:如何检测硬件蓝牙键盘上的逃逸/控制键?(iOS: How to detect the es

2019-07-19 16:32发布

我想弄清楚如何检测的逃亡(和其他键组合像Ctrl和Alt)被按下连接到iOS设备上使用蓝牙键盘。

一些答案似乎表明这是不可能的。 然而也有在AppStore的应用程序,这样做(例如iSSH),所以我认为它可能使用公共API不知何故。

我试着创造我自己的UITextInput但是按下Esc键时,这个什么也不接收。 该API我可以看到iPad的回应可能的只有部分是,当启用VoiceOver(逃亡工作原理早在Safari浏览器),所以我不知道是否有在通过无障碍API的方法吗?

我也想看看是否有什么东西我可以从NSNotificationCenter观察,可能会帮助,但还没有找到任何东西。

建议表示欢迎,我已经劈砍而去,在这一天,我在一个小的损失的,现在我。

Answer 1:

您可以在iOS的7,现在做到这一点。例如,实施退出键,覆盖UITextView的,并放置在你的类下面的方法:

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

你并不需要检查,以确保你是在iOS 7,因为早期版本的操作系统将不会调用keyCommands方法。



Answer 2:

有你想要实现的目标没有公共的API,因此这可能导致排斥反应。

如果你愿意冒险,你可以试试这个 。 基本上至极截获发送到您的应用程序通过覆盖所有事件sendEvent:在您UIApplication



Answer 3:

AFAIK这一点使用公共API是不可能的。 我已经做了一些搜索和ESC键无法识别。 我没有做的唯一一件事就是尝试iSSH (它的成本9€:-),但如果你在AppStore上阅读说明它似乎很清楚,一个硬件(蓝牙)键盘上的ESC键不起作用:

  • 详尽的关键配置支持。 有箭头键(通过弹出窗口或通过工具栏)。 CTRL,ALT,ESC, 标签移位 ,FN密钥(1-10),`,PgUp,PgDown和用于未列出这些键提供了多种装置来添加它们。

  • 方向键, 功能键和在任一通过选项键映射ctrl键的重新映射蓝牙键盘支持X11/VNC服务器或终端。 当启用时, 选项 + 按键映射到相当于按Ctrl + 按键

正如你所看到的,在第二行ESC键未提及。 此外,我发现这个(旧) 职位 。

编辑:

正如你上一个更新,我已经找到了一种方法来“隐藏”的_gsEvent二进制里面。 我不知道,如果苹果的静态分析仪可以找到它,但是。 诀窍很简单...创建_gsEvent在运行时选择(和其他私人选择)!

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

我试图二进制搜索里面,我没有找到_gsEvent ,因为它只有在运行时创建的关键字,效果显着。
希望这可以帮助。



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