检测iPad键盘隐藏与外接键盘连接的区别?

17
iPad的虚拟键盘至少会在以下三种情况下消失:
  1. 如果控件(例如,一个UITextField)在程序中通过代码主动取消第一响应者(即结束编辑)。
  2. 如果用户点击右下角的“收起键盘”按钮。
  3. 如果用户连接到USB/键盘底座外设。
在所有情况下,我都会收到 UIKeyboardWillHideNotification 通知。
问题在于前两种情况通常是相等的——也就是说,用户已经完成了文本字段的编辑。但是在第三种情况下,文本字段仍在被编辑,只是输入源不同而已。
检测第2种和第3种情况之间的区别是问题所在。在这两种情况下,我都只收到 UIKeyboardWillHideNotification 通知。在第2种情况中,我通常还要锁定编辑控件并提交值。在第3种情况下,我通常不想执行任何操作,允许编辑继续进行。
但我该如何区分它们呢?
苹果的Pages应用程序似乎可以在重命名文档标题时区分它们。
2个回答

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

很遗憾,物理键盘在出现时不会生成UIKeyboardWillShowNotification。仅附加它会生成对应于虚拟键盘的WillHide通知。 - Ben Zotto
在情况1中,控件失去焦点。在情况2中也是如此吗?我假设在情况3中,控件保留焦点。 - drawnonward
在第2和第3种情况下,控件仍然是firstResponder。放弃第一响应者将关闭键盘,但反之则不明显。 - Ben Zotto

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,文本字段仍在编辑状态,并且仍然是第一响应者。只是没有键盘。 - Ben Zotto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接