我需要在我的应用程序中支持外部键盘功能,并需要检测类似于 Alt+Tab Tab 的组合键,在应用程序中触发某些事件。在 iOS 6 中,我已经重写了
- (void)sendEvent:(UIEvent *)anEvent;
在 UIApplication
子类中编写函数,以获取外部键盘按下组合键的信息。
但是现在我正在 IOS 7 上测试我的应用程序,似乎对于任何硬件键按下事件,sendEvent 都没有被调用。
有什么解决方案吗?
我需要在我的应用程序中支持外部键盘功能,并需要检测类似于 Alt+Tab Tab 的组合键,在应用程序中触发某些事件。在 iOS 6 中,我已经重写了
- (void)sendEvent:(UIEvent *)anEvent;
在 UIApplication
子类中编写函数,以获取外部键盘按下组合键的信息。
但是现在我正在 IOS 7 上测试我的应用程序,似乎对于任何硬件键按下事件,sendEvent 都没有被调用。
有什么解决方案吗?
在iOS 7中,有一种100%的支持方式可以使用新的UIKeyCommand
类和UIResponder
链来处理蓝牙键盘上的快捷键。我曾经在博客中提到了这个,但这是要点:
在你的Responder链中添加一个方法,用于返回一个UIKeyCommand
对象数组的keyCommands
:
- (NSArray *)keyCommands {
UIKeyCommand *commandF = [UIKeyCommand keyCommandWithInput:@"f" modifierFlags:UIKeyModifierCommand action:@selector(handleCommandF:)];
return @[commandF];
}
当在文本输入视图中按下⌘F时,响应者链将查找handleCommandF
方法。如果有多个定义,则会使用最紧密范围的一个(例如,视图本身优先于视图控制器)。
请注意,这仅在输入(例如UITextField
或UITextView
)是第一响应者时才起作用。如果您想要在应用程序中使用“全局”快捷键,可以使用一个小技巧:隐藏一个屏幕外的UITextField
并将焦点放在上面。