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

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

有些答案似乎表明这是不可能的。 但是,Appstore中有这样的应用程序(例如iSSH),所以我认为可以使用公共API。

我已经尝试创build自己的UITextInput,但是当按下Escape键时,这没有收到任何东西。 API的唯一部分我可以看到iPad可能响应的地方是启用了VoiceOver(Escape在Safari中工作),所以我想知道是否有通过可访问性API的方法?

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

build议表示欢迎,我一直在这里砍了一天,现在有点亏了。

您现在可以在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,因为早期版本的OS不会调用keyCommands方法。

没有公开的API来完成你的任务,所以这可能会导致拒绝。

如果你愿意冒这个险,你可以试试这个 。 Wich基本上通过在你的UIApplication覆盖sendEvent:来截获所有发送到你的App的事件。

AFAIK这是不可能的使用公共API。 我做了一些search, esc键不被识别。 我唯一不做的就是试试iSSH (它花费9欧元:-),但是如果你阅读AppStore上的描述,似乎很清楚硬件(蓝牙)键盘上的ESC键不起作用:

  • 详尽的关键configuration支持。 有方向键(通过popup或通过工具栏)。 ctrlaltesctabshiftFn键( 1-10 ), ` key, PgUpPgDown和那些未列出的键提供了多种方法来添加它们。

  • 蓝牙键盘支持箭头键, function键和通过X11/VNC服务器或terminal中的选项键映射的ctrl键重新映射。 启用时,按下Option + 将映射到等效的Ctrl + 按下。

正如你所看到的,在第二行中没有提到ESC键。 而且,我发现了这个(旧)的post 。

编辑:

作为你最近的更新,我find了一种方法来“隐藏”在二进制文件中的_gsEvent 。 但是,我不知道苹果静态分析仪是否可以find它。 技巧很简单…在运行时创build_gsEventselect器(和其他私有select器)!

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

我试图在二进制内部search,我没有find_gsEvent关键字,显然是因为它只是在运行时创build的。
希望这可以帮助。