即使存在外部键盘,UIKeyboardDidShowNotification事件也会触发

时间:2013-01-09 15:34:39

标签: ios uikeyboard

我需要知道是否连接了外接键盘。我熟悉使用NSNotificationCenter并获取UIKeyboardDidShowNotification事件以确定是否显示了虚拟键盘。我遇到的问题是,如果连接了外接键盘并且您在文本字段中单击,则会在底部显示一个小视图,其中包含' prev'和' next'纽扣。即使连接了外部键盘,UIKeyboardDidShowNotification事件也会在发生这种情况时触发。因此,即使连接外部键盘,也会显示虚拟键盘正在显示。

无论如何都要使用' prev'来禁用此小视图和' next'显示按钮,希望不会触发UIKeyboardDidShowNotification事件。

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

2 个答案:

答案 0 :(得分:0)

这是我能找到的最佳解决方案....如果留下空白,他们也会在答案下方的评论中提供相关说明:how to remove prev next button from virtual keyboard IOS

答案 1 :(得分: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
    }
}

以上内容应该可行,但您可以随时调试应用程序并更改“如果'声明,以便更好地满足您的需求。例如,由于我只允许横向布局,我只需要检查kbRect.origin.x,但不是检查它是否为非零,而是使用了我从调试中得到的数字。

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