iOS:如何检测硬件蓝牙键盘上的转义/控制键?

new*_*299 23 keyboard ipad ios ios6

我试图弄清楚如何检测到连接到iOS设备的蓝牙键盘上的Escape(以及其他键组合,如Ctrl和alt).

一些答案似乎表明这是不可能的.然而,Appstore中有应用程序执行此操作(例如iSSH),因此我认为可能以某种方式使用公共API.

我已经尝试创建自己的UITextInput但是当按下Escape键时,它什么也没有收到.我可以看到iPad可能响应的唯一部分是VoiceOver启用时(Escape在Safari中的作用),所以我想知道是否有通过辅助功能API的方法?

我也试着看看我能从NSNotificationCenter中观察到的东西是否有所帮助,但还没有发现任何东西.

欢迎提出建议,我已经在这一天被黑客攻击了一天,现在我有点亏.

Mik*_*ike 15

您现在可以在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.
}
Run Code Online (Sandbox Code Playgroud)

您无需检查以确定您使用的是iOS 7,因为早期版本的操作系统不会调用keyCommands方法.


Dan*_*iel 6

没有公共API可用于您要完成的任务,因此可能会导致拒绝.

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

  • 有时候,如果您的应用程序是在AppStore中,它只取决于审阅者...也许该应用程序的开发人员有更多的运气. (2认同)

Lom*_*baX 5

使用公共API无法实现AFAIK.我做了一些搜索,esc密钥无法识别.我唯一没做的就是尝试iSSH(花费9欧元:-),但是如果你在AppStore上阅读说明,那么ESC硬件(蓝牙)键盘上的按键似乎不起作用:

  • 彻底的关键配置支持.有arrow键(通过弹出或工具栏).ctrl,alt,esc,tab,shift,Fn键(1-10),`键,PgUp,PgDown和用于这些键没有列出提供了多个装置来添加它们.

  • 蓝牙键盘支持arrow密钥,function密钥以及ctrl通过X11/VNC服务器或终端中的选项密钥映射重新映射密钥.启用后,Option+ key按下映射到等效Ctrl+ key按下.

如您所见,在第二行ESC中未提及密钥.而且,我发现了这个(旧的)帖子.

编辑:

作为你最后的更新,我找到了一种"隐藏" _gsEvent二进制文件内部的方法.但是,我不知道Apple静态分析仪是否可以找到它.诀窍很简单...... _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;
}
Run Code Online (Sandbox Code Playgroud)

我试图在二进制文件中搜索,但我找不到_gsEvent关键字,显然是因为它只在运行时创建.
希望这可以帮助.