我想弄清楚如何检测的逃亡(和其他键组合像Ctrl和Alt)被按下连接到iOS设备上使用蓝牙键盘。
一些答案似乎表明这是不可能的。 然而也有在AppStore的应用程序,这样做(例如iSSH),所以我认为它可能使用公共API不知何故。
我试着创造我自己的UITextInput但是按下Esc键时,这个什么也不接收。 该API我可以看到iPad的回应可能的只有部分是,当启用VoiceOver(逃亡工作原理早在Safari浏览器),所以我不知道是否有在通过无障碍API的方法吗?
我也想看看是否有什么东西我可以从NSNotificationCenter观察,可能会帮助,但还没有找到任何东西。
建议表示欢迎,我已经劈砍而去,在这一天,我在一个小的损失的,现在我。
您可以在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方法。
有你想要实现的目标没有公共的API,因此这可能导致排斥反应。
如果你愿意冒险,你可以试试这个 。 基本上至极截获发送到您的应用程序通过覆盖所有事件sendEvent:
在您UIApplication
。
AFAIK这一点使用公共API是不可能的。 我已经做了一些搜索和ESC键无法识别。 我没有做的唯一一件事就是尝试iSSH
(它的成本9€:-),但如果你在AppStore上阅读说明它似乎很清楚,一个硬件(蓝牙)键盘上的ESC键不起作用:
正如你所看到的,在第二行ESC键未提及。 此外,我发现这个(旧) 职位 。
编辑:
正如你上一个更新,我已经找到了一种方法来“隐藏”的_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;
}
我试图二进制搜索里面,我没有找到_gsEvent
,因为它只有在运行时创建的关键字,效果显着。
希望这可以帮助。
文章来源: iOS: How to detect the escape/control keys on a hardware bluetooth keyboard?