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

时间:2013-02-09 20:10:23

标签: ios ipad ios6 keyboard

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

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

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

我也试过看看我可以从NSNotificationCenter中观察到哪些内容可能有所帮助,但还没有发现任何内容。

欢迎提出建议,我已经在这方面喋喋不休了一天,现在我有点不知所措。

3 个答案:

答案 0 :(得分:14)

您现在可以在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方法。

答案 1 :(得分:6)

您打算完成的工作没有公共API,因此可能会导致拒绝。

如果您愿意承担风险,可以尝试this。它基本上通过覆盖sendEvent:中的UIApplication拦截发送到您应用的所有事件。

答案 2 :(得分:5)

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

  • 详尽的关键配置支持。有箭头键(通过弹出窗口或工具栏)。 ctrl alt esc tab shift Fn < / kbd> keys( 1-10 ),`键, PgUp PgDown 以及未列出的那些键提供了多种方法来添加它们。

  • 蓝牙键盘支持 arrow 键, function 键以及通过选项键映射重新映射 ctrl 键{ {1}}服务器或终端。启用后,选项 + 按下映射到等效的 Ctrl + 按。

如您所见,在第二行中未提及 ESC 键。 此外,我发现了这个(旧的)post

编辑:

作为您上次的更新,我找到了一种方法来“隐藏”二进制文件中的X11/VNC。但是,我不知道Apple静态分析仪是否可以找到它。 诀窍很简单......在运行时创建_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; } 关键字,显然是因为它仅在运行时创建。
希望这会有所帮助。