Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Notifications UIKeyboardWillShowNotification-iOS8与iOS7_Notifications_Keyboard_Ios8 - Fatal编程技术网

Notifications UIKeyboardWillShowNotification-iOS8与iOS7

Notifications UIKeyboardWillShowNotification-iOS8与iOS7,notifications,keyboard,ios8,Notifications,Keyboard,Ios8,在iOS8中,我注意到视图控制器不再接收UIKeyboardWillSHowNotification,而以前是在iOS7中 以下是场景: 1.)视图控制器A显示键盘,并按下视图控制器B而不退出第一响应程序 2.)视图控制器B有一个控件,该控件在其viewDidLoad调用期间成为第一响应者,而VCA正在创建该控件,然后将其推送到导航控制器上 3.)如果VC A在按下B时没有显示键盘,则通知工作正常。但是,如果A在按B时仍在编辑,则B未获得键盘将显示通知 在没有键盘通知的情况下,VC B没有调整大

在iOS8中,我注意到视图控制器不再接收UIKeyboardWillSHowNotification,而以前是在iOS7中

以下是场景:

1.)视图控制器A显示键盘,并按下视图控制器B而不退出第一响应程序

2.)视图控制器B有一个控件,该控件在其viewDidLoad调用期间成为第一响应者,而VCA正在创建该控件,然后将其推送到导航控制器上

3.)如果VC A在按下B时没有显示键盘,则通知工作正常。但是,如果A在按B时仍在编辑,则B未获得键盘将显示通知

在没有键盘通知的情况下,VC B没有调整大小/重新定位,并且看起来不正确


在找到解决方案之前,我使用的解决方法是在推送另一个可能正在编辑的视图控制器时,从任何可能正在编辑的视图控制器执行以下操作:

i、 例如,在按下另一个视图控制器之前,请确保调用: [自视图编辑:是]

虽然它可以工作,但视图控制器(B)在显示之前会被应用程序的状态“破坏”似乎并不好


问题:我在这里做错什么了吗

据我所知,有三件事是可能的:

我应该收到通知,但我不是b/c我做错了什么

我应该得到通知,但我不是一个B/c的错误

C.)我不能总是依赖于收到通知……但是如果在VC B中出现通知时我没有收到通知,我需要能够在不依赖键盘通知信息的情况下获得显示键盘的键盘尺寸。所有的苹果文档都说要使用这些通知(据我所知)。。。。其中指向选项A.)或B.)



今晚晚些时候/明天早些时候,我可以创建并上传示例代码,以尝试隔离/供大家测试/复制以了解我在做什么。

我可以看到iOS8/xCode6的相同问题(适用于iOS7和xCode5)。在我的例子中,我正在观察AppDelegate中模型上的systemStatus属性,以便在用户从应用程序中的任何位置注销时注销用户并将用户带回登录屏幕。我通过在我的应用程序委托observeValueForKeyPath:方法中将window.rootViewController设置为loginViewController来实现这一点

这在iOS7/xCode5上可以正常工作,但在iOS8/xCode6上,我中途松开了键盘。看起来我的loginViewController可能在窗口的rootViewController切换完成之前(在iOS8中)注册键盘通知(在其viewWillDisplay方法中),从而注册到旧窗口的通知中心

我将键盘通知的注册改为ViewDidDisplay:方法,这似乎解决了问题,但不知何故,出于某种原因,它似乎被调用了两次