【问题标题】:Detecting iPad keyboard hide versus external keyboard connect?检测 iPad 键盘隐藏与外部键盘连接?
【发布时间】:2010-05-20 16:30:19
【问题描述】:

iPad 虚拟键盘将在(至少)以下三种情况之一中消失:

  1. 如果控件(例如 UITextField)以编程方式退出第一响应者。
  2. 如果用户点击右下角的“关闭键盘”按钮。
  3. 如果用户连接到 USB/键盘底座外围设备。

在所有情况下,我都会收到UIKeyboardWillHideNotification

问题在于前两种情况通常是等价的——换句话说,用户已经完成了对文本字段的编辑。但在第三种情况下,文本字段仍在编辑中,只是来自另一个输入源。

问题在于检测案例 2 和 3 之间的差异。在这两种情况下我得到的都是UIKeyboardWillHideNotification。在情况 2 中,我通常还想锁定编辑控件并提交值。在第 3 种情况下,我通常什么都不做,让编辑继续进行。

但是我怎么能分辨出来呢?

Apple 的 Pages 应用程序似乎能够在文档标题重命名时区分这一点。

【问题讨论】:

    标签: iphone ipad keyboard


    【解决方案1】:

    我会查看随通知传递的 UIKeyboardBoundsUserInfoKey。物理键盘可能有空的边界。

    【讨论】:

    • 很遗憾没有。物理键盘在出现时不会生成 UIKeyboardWillShowNotification。附加它只会生成一个与虚拟通知相对应的 WillHide 通知。
    • 在情况 1 中,控件失去焦点。情况 2 也一样吗?我假设在案例 3 中,控件保持焦点。
    • 在情况 2 和 3 中,控件继续作为 firstResponder。辞职第一响应者将关闭键盘,但相反的情况显然并非如此。
    【解决方案2】:

    听起来您只是想弄清楚用户何时完成编辑。您可以收听案例 1 和案例 2 的 UITextFieldTextDidEndEditingNotification 通知。

    一个更简单的解决方案是您不能只检查UITextFieldediting 属性以确定它是否仍然应该被编辑?我没有物理键盘,所以我无法测试这个。我只是猜测。

    这是该属性文档的链接:http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITextField_Class/Reference/UITextField.html#//apple_ref/occ/instp/UITextField/editing

    我很想知道这是否有效...... :)

    【讨论】:

    • 对于案例 #2,文本字段仍在编辑中,它仍然是第一响应者。就是没有键盘。
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 2011-07-30
    • 1970-01-01
    • 2011-06-16
    • 2011-08-08
    • 2012-04-19
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多