有没有办法在呈现另一个之后解除当前的ViewController?

时间:2014-12-11 10:08:12

标签: ios cocoa-touch ios7 uiviewcontroller

经过一段时间寻找答案后,我不得不承认我对此案感到非常困惑。

在我的工作中,我被要求做一些非常具体的事情:

我必须在之前的UIViewController上呈现一个UIViewController,实际上,当前的ViewController会在第二个出现之前解除自身。这给了整个事情一个有趣的动画,一个ViewController下降,另一个从底部升起。但是......它不是真的“专业”,我们能够在动画期间看到场景后面的rootViewController。

所以,我必须确切地说没有NavigationController,在我看来这会让这更容易,所以我不得不用两个UIViewController来做,并且有我的实际代码:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
        UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"userViewController"];
        [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:controller animated:YES completion:^{
            [self dismissViewControllerAnimated:YES completion:nil];
}];     

按下按钮后立即调用,所以我认为实际的ViewController viewDidLoad或viewDidAppear没有问题。

但每次运行此代码时,都会出现以下错误:

[1163:17641] Warning: Attempt to present <UserViewController: 0x7b0f0a00> on <EIHomeViewController: 0x7b0d2a00> whose view is not in the window hierarchy!

我真的不知道如何能够在下一个ViewController viewDidAppear中保留当前UIViewController的跟踪以解除它,以确保屏幕上没有“停电”。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

试试这段代码:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"userViewController"];
[self dismissViewControllerAnimated:NO completion:^{
    [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:controller animated:NO completion:nil];
}];