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或通过工具栏)。 ctrl , alt , esc , tab , shift , Fn键( 1-10 ), ` key, PgUp , PgDown和那些未列出的键提供了多种方法来添加它们。
-
蓝牙键盘支持箭头键, function键和通过
X11/VNC
服务器或terminal中的选项键映射的ctrl键重新映射。 启用时,按下Option + 键将映射到等效的Ctrl + 键按下。
正如你所看到的,在第二行中没有提到ESC键。 而且,我发现了这个(旧)的post 。
编辑:
作为你最近的更新,我find了一种方法来“隐藏”在二进制文件中的_gsEvent
。 但是,我不知道苹果静态分析仪是否可以find它。 技巧很简单…在运行时创build_gsEvent
select器(和其他私有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的。
希望这可以帮助。