首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPad:检测外部键盘

iPad:检测外部键盘
EN

Stack Overflow用户
提问于 2011-02-16 16:56:11
回答 2查看 4.9K关注 0票数 7

我的应用程序使用UIAccessoryView为虚拟键盘提供额外的键盘功能(例如向前/向后的选项卡和箭头键),但这会导致UIKeyboardDidShowNotification启动,即使在物理键盘存在时(附件出现在屏幕底部)。

我想检查在处理UIKeyboardWillShowNotification时是否附加了物理键盘,以防止附件视图的出现,并防止我的自定义视图滚动(为不存在的虚拟键盘腾出空间)。

我试过检查UIKeyboardFrameEndUserInfoKey键,但它返回虚拟键盘的实际大小,尽管没有显示任何内容。

有没有任何方法可以检测到物理键盘的存在,以防止这种不必要的行为?

嗯,情节更复杂了。

我尝试通过从触发键盘的Responder对象的inputAccessoryView属性返回nil来禁用输入附件。当存在物理键盘时,这会抑制UIKeyboardWillShowNotificationUIKeyboardDidShowNotification,但在没有这样的键盘时保留这些通知。目前为止一切都很好。

然后,我尝试重新启用inputAccessoryView后,只有在UIKeyboardWillShowNotification已经收到。这只会在需要虚拟键盘时触发,因此应该允许我在这些情况下重新引入附件视图。或者我是这样想的。

不幸的是,操作系统似乎没有在inputAccessoryView之后检查UIKeyboardWillShowNotification,因此它无法在需要时显示附件视图:o(

这让我有两个选择:

  • 包含输入附件视图,为虚拟键盘用户提供了额外的功能,但失去了检测物理键盘的能力,因此不支持物理设备;或者
  • 完全排除了输入附件,阻止大多数用户访问额外的键,但允许应用程序与物理键盘一起工作。

不是一个很好的选择,所以我仍然热衷于看看是否有其他人已经解决了这个问题!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-29 05:08:50

(这个答案是肖恩·希伯在苹果论坛上提出的)

当您得到一个UIKeyboardDidShowNotification时,不要使用UIKeyboardFrameEndUserInfoKey给出的框架,只需测试视图的附件视图在哪里,然后使用它。我所做的就是检查附件视图的框架是什么,并将其转换为我自己视图的坐标空间。然后我就可以很容易地用这个框架来决定该做什么。

注意:当使用蓝牙键盘的弹出按钮显示/隐藏屏幕上的键盘时,UIKit似乎再次发送UIKeyboardDidShowNotification,而不是UIKeyboardWillHideNotification。这也是一个令人困惑的不一致,但上述解决办法仍然有效,因为系统将改变inputAccessoryView的框架时,它在屏幕上的键盘滑动,所以你仍然可以相应地调整事情。

票数 8
EN

Stack Overflow用户

发布于 2015-03-29 14:34:02

如果您检查UIKeyboardFrameEndUserInfoKey中的框架,您会发现在附加外部键盘时,它被键盘的高度所抵消(它基本上是“出现”,但从未出现在屏幕底部之上),因此您可以将其转换为本地坐标空间,并将其与视图的边界相交,以找到键盘的可见高度。

代码语言:javascript
复制
- (void)keyboardWillShow:(NSNotification *)notification {

    UIView *view = [self view];
    CGRect bounds = [view bounds];
    CGRect keyboardFrame = [[notification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGRect convertedKeyboardFrame = [view convertRect:keyboardFrame fromView:nil];
    CGRect intersection = CGRectIntersection(convertedKeyboardFrame, bounds);

    // intersection.size.height == 0 with external keyboards
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5019471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档