3

我需要知道是否连接了外接键盘。我熟悉使用 NSNotificationCenter 并获取 UIKeyboardDidShowNotification 事件来确定是否显示了虚拟键盘。我遇到的问题是,当连接了外部键盘并单击文本字段时,底部会显示一个带有“上一个”和“下一个”按钮的小视图。UIKeyboardDidShowNotification 事件会在发生这种情况时触发,即使连接了外部键盘也是如此。因此,即使连接了外部键盘,它看起来也好像正在显示虚拟键盘。

无论如何,是否可以禁用带有“上一个”和“下一个”按钮的小视图,并希望 UIKeyboardDidShowNotification 事件不会被触发。

否则,似乎无法以可靠的方式使用 NSNotificationCenter 来确定键盘是否已连接。我当然不想使用私有 API 来检测是否连接了键盘。

4

2 回答 2

0

这是我能找到的最佳解决方案....如果留下空白,他们在答案下方的评论中也有相关说明:如何从虚拟键盘 IOS 中删除 prev next 按钮

于 2013-01-09T16:32:52.393 回答
0

您不应该试图绕过正常的设备行为来进行硬件检测。忘记尝试使事件不触发。相反,请查看使用外部键盘与屏幕键盘触发时的不同之处。

通过调试,我注意到无论是否连接了外部键盘,视图的大小都不会有任何不同。相反,视图的原点发生了变化,因此只有键盘的顶部工具栏被绘制在屏幕范围内。

- (void)keyboardDidShow:(NSNotification *)notification {

    NSDictionary *userInfo = [notification userInfo];
    CGRect kbRect = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];

    if(kbRect.origin.x != 0 || kbRect.origin.y != 0) {
        //external keyboard
    }
    else {
        //onscreen keyboard
    }
}

以上应该可以工作,但您始终可以调试您的应用程序并更改“if”语句以更好地满足您的需求。例如,因为我只允许横向布局,所以我只需要检查kbRect.origin.x,而不是检查它是否非零,而是使用从调试中获得的数字。

我想这已经晚了一年,但我在研究时遇到了这个问题,并认为它仍然值得一个很好的答案。

于 2014-02-08T00:03:29.127 回答