当我的iOS应用程序第一次启动时,我会自动打开这样的“欢迎”模式:
UIViewController *intro = [self.storyboard instantiateViewControllerWithIdentifier:@"intro"];
intro.modalPresentationStyle = UIModalPresentationFullScreen;
//Show the modal
[self presentViewController:intro animated:NO completion:nil];
在该模式中,指示用户将应用程序链接到Dropbox。他们点击一个按钮来触发:
[[DBSession sharedSession] linkFromController:self];
这是一个Dropbox SDK方法,可以在另一个模式中打开Dropbox身份验证UIWebView,如下所示:http://d.pr/i/6ZnC
一旦他们登录,模态会自动关闭动画。
然后我尝试用这个来关闭原始的介绍模式:
[self dismissViewControllerAnimated:YES completion:nil];
但是我得到了这个警告,模态没有关闭:
警告:尝试从视图控制器中解除< PPIntroViewController:0xf296ab0>正在进行演示或解雇!
这是我尝试过的:
dismissViewControllerAnimated
之前设置了一个人工延迟让Dropbox模式关闭,但它没有帮助:[NSThread sleepForTimeInterval:2.0];
[self dismissViewControllerAnimated:NO completion:nil];
,这也无济于事。if(![self isBeingDismissed]){ ... }
并且没有运气。有什么想法吗?如何确定提交/解除的确切内容以及阻止模态关闭?
iOS 7 + Xcode 5
答案 0 :(得分:1)
我发现了这个问题。您可以在DBSession+ios.m
[rootController presentModalViewController:navController 动画:YES];
因此,在内部,他们将从self
展示他们的身份验证视图控制器。您已经从self
展示了您的视图控制器。所以当他们或者你试图从自己解除视图控制器时,给出这个警告,因为它有呈现视图控制器。因此,不要将self传递给dropBox,而是传递intro
视图控制器。
[[DBSession sharedSession] linkFromController:intro];
答案 1 :(得分:0)
尝试调用
[self dismissViewControllerAnimated:YES completion:nil];
从introViewController内部而不是从根目录中。如果没有其他模态,这应该调用self.presentingViewController。所以我在第一个
的完成句柄块中嵌套一个答案 2 :(得分:0)
我发现如果您尝试在前一个事务(动画)正在进行时尝试推送/关闭视图控制器,则会出现此问题。
在{strong> 0.50到1 秒之间取NSTimer
并解除ViewController。这是一个有用的技巧,所以你当前的viewController完成了它的动画。
否则不确定,但尝试使用dismissViewControllerAnimated
设置否。
[self dismissViewControllerAnimated:NO completion:nil];