对于iOS8,我注意到一个视图控制器不再接收UIKeyboardWillSHowNotification,而之前是iOS7。
以下是该方案:
1。)视图控制器A正在显示一个键盘,并在不退出第一响应者的情况下推动视图控制器B
2。)视图控制器B有一个控件,它在viewDidLoad调用期间成为第一响应者,而它是由VCA创建的,然后被推送到导航控制器
3。)如果按下B时VC A没有显示键盘,则通知正常。但是,如果A在按B时仍在编辑,那么B不会让键盘显示通知。
没有键盘通知,VC B没有调整大小/重新定位,看起来不正确。
我找到解决方案之前使用的解决方法是在推送可能正在编辑的另一个视图控制器时,可能正在编辑的任何视图控制器执行以下操作:
即,在推送另一个视图控制器之前,请务必致电: [self.view endEditing:YES];
虽然它有效,但在显示它之前,视图控制器(B)可以被应用程序状态“破坏”似乎不太好。
问题:我在这里做错了吗?
据我所知,三件事之一是可能的:
A。)我应收到通知,但我不是b / c我做错了什么
B。)我应该收到通知,但我不是错误的b / c
C。)我不能总是依赖于获取通知......但是如果我在VC B中没有收到通知,那么我需要能够获得所显示键盘的键盘尺寸依靠键盘通知信息。所有苹果文档都说要使用通知(据我所知)....它指向选项A.)或B。)。
我可以在今晚/明天晚些时候创建并上传示例代码,尝试隔离/为大家测试/重现以查看我在做什么。
答案 0 :(得分:0)
我可以看到iOS8 / xCode6的相同问题(适用于iOS7和xCode5)。在我的例子中,我正在我的AppDelegate中观察模型上的systemStatus属性,以便在用户从应用程序的任何位置注销时将用户注销并将用户带回登录屏幕。我是通过在我的App Delegate observeValueForKeyPath:方法中将window.rootViewController设置为loginViewController来实现的。
这在iOS7 / xCode5上工作正常,但在iOS8 / xCode6上,我松开了键盘。看起来我的loginViewController可能在窗口的rootViewController开关完成之前(在iOS8中)注册键盘通知(在其ViewWillAppear方法中),从而注册到旧窗口的通知中心......
我将键盘通知的注册移到了ViewDidAppear:方法,而这似乎解决了这个问题,但不知何故,由于某些原因,它似乎被调用了两次。