1、错误:Warning: Attempt to present <UIAlertController: 0x7fd192806e20> on <ViewController: 0x7fd1928048d0> whose view is not in the window hierarchy!
出现这个问题原因是你使用的present的Controller并不是当前的controller,iOS系统的present操作,不允许同时存在两个present视图,在当前使用控制器是使用present方式突出的情况下,如果使用非当前controller去present意味着同时存在两个present出来的controller,所以会报错。解决办法就是获取当前正在使用的VC控制器对象,再进行present就可以了。
这里需要注意一下,push的出来的控制器不会影响模态跳转的逻辑,也就是说,如果一个控制器是在Nav下面,那不管使用Nav使用push挑战了多少级VC,都依然可以使用present,我们对于带有Nav的VC,是直接获取其Nav还是获取VC本身,效果都是一样,所以我们可以获取到present最顶层的VC就可以了,获取代码如下
+ (UIViewController *)appRootTopViewController
{
UIViewController *RootVC = [UIApplication sharedApplication].keyWindow.rootViewController;
UIViewController *topVC = RootVC;
while (topVC.presentedViewController) {
topVC = topVC.presentedViewController;
}
return topVC;
//作者:3ac4789301e6
//链接:https://www.jianshu.com/p/375846849597
//来源:简书
//简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
}
网友评论