我需要知道是否连接了外接键盘。我熟悉使用NSNotificationCenter并获取UIKeyboardDidShowNotification事件以确定是否显示了虚拟键盘。我遇到的问题是,如果连接了外接键盘并且您在文本字段中单击,则会在底部显示一个小视图,其中包含' prev'和' next'纽扣。即使连接了外部键盘,UIKeyboardDidShowNotification事件也会在发生这种情况时触发。因此,即使连接外部键盘,也会显示虚拟键盘正在显示。
无论如何都要使用' prev'来禁用此小视图和' next'显示按钮,希望不会触发UIKeyboardDidShowNotification事件。
否则,似乎无法以可靠的方式使用NSNotificationCenter来确定键盘是否已连接。我当然不想使用私有API来检测键盘是否已连接。
答案 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
,但不是检查它是否为非零,而是使用了我从调试中得到的数字。
我想这已经晚了一年,但我在研究时遇到了这个问题,并认为它仍然值得一个好的答案。