IOS 7中外部蓝牙键盘的集成

7

我需要在我的应用程序中支持外部键盘功能,并需要检测类似于 Alt+Tab Tab 的组合键,在应用程序中触发某些事件。在 iOS 6 中,我已经重写了

- (void)sendEvent:(UIEvent *)anEvent;

UIApplication 子类中编写函数,以获取外部键盘按下组合键的信息。

但是现在我正在 IOS 7 上测试我的应用程序,似乎对于任何硬件键按下事件,sendEvent 都没有被调用。

有什么解决方案吗?

2个回答

18

在iOS 7中,有一种100%的支持方式可以使用新的UIKeyCommand类和UIResponder链来处理蓝牙键盘上的快捷键。我曾经在博客中提到了这个,但这是要点:

在你的Responder链中添加一个方法,用于返回一个UIKeyCommand对象数组的keyCommands

- (NSArray *)keyCommands {
    UIKeyCommand *commandF = [UIKeyCommand keyCommandWithInput:@"f" modifierFlags:UIKeyModifierCommand action:@selector(handleCommandF:)];
    return @[commandF];
}

当在文本输入视图中按下⌘F时,响应者链将查找handleCommandF方法。如果有多个定义,则会使用最紧密范围的一个(例如,视图本身优先于视图控制器)。

请注意,这仅在输入(例如UITextFieldUITextView)是第一响应者时才起作用。如果您想要在应用程序中使用“全局”快捷键,可以使用一个小技巧:隐藏一个屏幕外的UITextField并将焦点放在上面。


1
最后一行缺少](闭合方括号)。 - Klaas
谢谢!(为了SO填充) - swilliams
2
你不一定需要一个UITextField。你可以创建一个自定义的UIView子类,该子类在canBecomeFirstResponder:中返回YES,然后将该自定义视图放入你的视图层级中并将其设置为第一响应者。 - lucius

-1
在IOS7.x中检测硬件键盘按下事件的一种方法是重写UIApplication中的方法-(void)handleKeyUIEvent:(id)anEvent。
但这是IOS的私有方法,可能会导致应用商店拒绝。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接