我正在试图弄清楚如何检测到连接到iOS设备的蓝牙键盘上是否已按下Escape(以及其他键组合,如Ctrl和alt)。
有些答案似乎表明这是不可能的。然而,Appstore中有应用程序执行此操作(例如iSSH),因此我认为可以以某种方式使用公共API。
我已经尝试创建自己的UITextInput但是在按下Esc键时没有收到任何内容。我可以看到iPad可能响应的唯一部分是VoiceOver启用时(Escape在Safari中的作用),所以我想知道是否有通过辅助功能API的方法?
我也试过看看我可以从NSNotificationCenter中观察到哪些内容可能有所帮助,但还没有发现任何内容。
欢迎提出建议,我已经在这方面喋喋不休了一天,现在我有点不知所措。
答案 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;
}
关键字,显然是因为它仅在运行时创建。
希望这会有所帮助。