首页 > 代码库 > firstresponder 后,键盘不显示
firstresponder 后,键盘不显示
问题:调用了firstresponder ,但键盘并没有显示,必须手动点击一下,才会显示键盘
分析:原入口进入是好的,自己新加了个window,从这个winodw的界面中点击进入就不显示了。
说明界面本身并没有问题,是自己新加的window导致了键盘弹不出
怀疑:
1、优先级
排除,因为如果是优先级的问题,点击触发也不会弹出
2、自己新建的窗口的界面中,没有释放掉firstResponder,导致UITextField获得不了
将自己窗口的界面中,所有界面元素在界面willdisappear的时候都显示调用一下resignFirstResponder,依然无效,排除
想不出别的原因了,google之,没找到好的解决办法,基本都是由于2,但看到了一些方法,如用
canbecomeFirstResponder来判断当前view能否获得firstResponder.
测试了下我的UITextField,果然返回no,为什么了?为什么这个view不能成为第一响应者,不应该啊!
https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/event_delivery_responder_chain/event_delivery_responder_chain.html#//apple_ref/doc/uid/TP40009541-CH4-SW1
看了下响应链,意外发现:
也就是说,我们应当最好在viewDidAppear中设置第一响应者。
最终发觉,它不能成为第一响应者,还是由于入口window的问题。
原因:我新建了一个window,把这个界面push进来,但是我并没有把这个window设为keywindow,导致它在响应链的位置有变化,所以不能成为第一响应者。
解决:1、保存原来的keywindow 2、在这个新window显示时,把它设为keyWindow 3、在它消失时,将原来的keywindow设回,ok.
firstresponder 后,键盘不显示