您的位置:首页 > 移动开发 > IOS开发

iOS 关于Presenting view controllers on detached view controllers is discouraged的警告

2016-01-26 13:32 489 查看
UIImagePickerController *picker = [[UIImagePickerController alloc] init];

[self presentViewController:picker animated:YES completion:nil];

换成

UIImagePickerController *picker = [[UIImagePickerController alloc] init];

AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

[delegate.window.rootViewController presentViewController:picker animated:YES completion:^{

}];
理论上是允许从一个控制器present到另外一个控制器,再从这个控制器present另外一个控制器.

我在网上查了有个大神这样解释的:

一般来说我们呈现一个viewcontroller 里面的内容,经常采用的方式是用navigationcontroller与tabbarcontroller来管理视图控制器。在这种情况下,呈现的视图控制器都在一个app维护的控制器堆栈里面。

而有一种情况就是通过self.view addsubview:AviewController.view也可以呈现出某个视图控制器。这种情况虽然看上去跟 push的结果没什么不同,但是实际上这个被呈现的view的controller并没有在当前app的视图堆栈里,也就是所谓的

detachviewcontroller,如果你在这个分离之外的视图控制器里面做present 调用,就会出现上述问题。

所以判定是否为分离视图,就是看它是不是处在当前app的控制器堆栈里面。

显然app的 rootviewcontroller 当然是处于堆栈里,并且是堆栈最底层的视图控制器。所以这种解决方案在一定程度上是可行的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: