有没有人找到一个好的方式使用新的iOS5键盘事件?

在开发我的iPad应用程序的最近一个功能,我意识到,新的iOS5键盘对接/分裂行为是引起巨大的问题。我使用inputAccessoryView的键盘上有一个文本字段,类似于Safari的find on page功能。我通过可滚动的UIWebView显示键盘,所以部分我的麻烦来自于缩小的UIWebview当键盘停靠,并有一个(大部分)全屏幕的webview当它被解除停靠。

我遇到的API的主要问题是,新的UIKeyboardWillChangeFrameNotification和UIKeyboardDidChangeFrameNotification通知一个从以前的API最好的一步,并有垃圾数据,使得几乎不可能了解键盘在许多情况下真正做什么。

可以识别以下任何键盘行为,而不必严格检查回来的通知的开始/结束帧?

>键盘退出
>键盘底座
>键盘分割/取消分页
>未下载的键盘显示
>未挂接的键盘隐藏
>当键盘被取消停靠时,视图旋转

我想出了一些抽象来识别停靠或屏幕外的帧,但即使这样,我的代码变得非常难以管理。如果您发现更好的方法,请回答或评论。我希望我在这里缺少的东西。谢谢。

解决方法

事情是不要过分考虑这一点。没有任何重要的改变。如果键盘进入屏幕底部的停靠位置,您将收到一个显示通知。如果它离开屏幕底部的停靠位置,你会得到一个“隐藏”通知。这正是发生在iOS 5之前。

唯一的区别是,不是离开停靠位置,因为它是移动离开屏幕,它可能会离开停靠位置,因为用户解除了它。你仍然会得到一个“隐藏”,所以你可以将你的界面移回它的基本位置。你不需要知道键盘现在已取消停靠(虽然你可以发现它不是从UIKeyboardDidChangeFrameNotification的屏幕,如果你真的想)。你不需要知道的原因是,当键盘被解除对接/拆分时,用户可以主动和移动键盘,如果它的方式,需要看到的东西。

因此,所有旧代码从iOS 5之前继续工作正常。这一切真的很聪明…

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...