在开发我的iPad应用程序的最近一个功能,我意识到,新的iOS5键盘对接/分裂行为是引起巨大的问题。我使用inputAccessoryView的键盘上有一个文本字段,类似于Safari的find on page功能。我通过可滚动的UIWebView显示键盘,所以部分我的麻烦来自于缩小的UIWebview当键盘停靠,并有一个(大部分)全屏幕的webview当它被解除停靠。
我遇到的API的主要问题是,新的UIKeyboardWillChangeFrameNotification和UIKeyboardDidChangeFrameNotification通知是一个从以前的API最好的一步,并有垃圾数据,使得几乎不可能了解键盘在许多情况下真正做什么。
可以识别以下任何键盘行为,而不必严格检查回来的通知的开始/结束帧?
>键盘退出
>键盘底座
>键盘分割/取消分页
>未下载的键盘显示
>未挂接的键盘隐藏
>当键盘被取消停靠时,视图旋转
我想出了一些抽象来识别停靠或屏幕外的帧,但即使这样,我的代码变得非常难以管理。如果您发现更好的方法,请回答或评论。我希望我在这里缺少的东西。谢谢。
解决方法
事情是不要过分考虑这一点。没有任何重要的改变。如果键盘进入屏幕底部的停靠位置,您将收到一个“显示”通知。如果它离开屏幕底部的停靠位置,你会得到一个“隐藏”通知。这正是发生在iOS 5之前。
唯一的区别是,不是离开停靠位置,因为它是移动离开屏幕,它可能会离开停靠位置,因为用户解除了它。你仍然会得到一个“隐藏”,所以你可以将你的界面移回它的基本位置。你不需要知道键盘现在已取消停靠(虽然你可以发现它不是从UIKeyboardDidChangeFrameNotification的屏幕,如果你真的想)。你不需要知道的原因是,当键盘被解除对接/拆分时,用户可以主动和移动键盘,如果它的方式,需要看到的东西。
因此,所有旧代码从iOS 5之前继续工作正常。这一切真的很聪明…