在模态显示第二个ViewController后删除ViewController

时间:2014-02-25 01:03:57

标签: ios uiviewcontroller

我的应用中的家伙我在应用委托方法application:didFinishLaunchingWithOptions:中有一些代码,用于确定初始视图控制器应该是LoginViewController还是MainViewController

如果首先显示LoginViewController并且用户成功登录,我会使用以下代码显示MainViewController模式:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
FSMainViewController *vc = (MainViewController *)[storyBoard instantiateViewControllerWithIdentifier:@"MainViewController"];
vc.loginViewController = self;
[self presentViewController:vc animated:YES completion:nil];

在屏幕上显示MainController之后,接下来我要做的是从内存中移除LoginViewController所以在viewWillApper:animated:我的MainViewController方法中使用此代码删除(或至少尝试)LoginViewController

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if (self.loginViewController) {
        [self.loginViewController dismissViewControllerAnimated:NO completion:nil];
    }
}

问题是此代码导致奇怪的行为,例如MainViewController被从屏幕上移除,并且此错误消息显示在控制台中。

Unbalanced calls to begin/end appearance transitions for <LoginViewController: 0xb06e350>

我也尝试在[self dismissViewControllerAnimated:NO completion:nil]方法的完成块中调用presentViewController:animated:completion,但仍然没有运气,但它没有用。

我做错了什么?当LoginViewController以模态方式呈现时,如何从内存中删除基础MainViewController

2 个答案:

答案 0 :(得分:1)

如果您希望登录控制器消失,请不要显示您的主视图控制器,只需将其设置为窗口的根视图控制器。

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
FSMainViewController *vc = (MainViewController *)[storyBoard instantiateViewControllerWithIdentifier:@"MainViewController"];
Self.window.rootViewController = VC;

答案 1 :(得分:0)

在您展示另一个或dismissViewController之后,您无法presentingViewController。在这里,您应先取消LoginViewController,然后再出现MainViewController

否则,如果您希望pushViewController,则可以致电[self.navigationController setViewControllers: animated:]以删除LoginViewController

如果您认为presentingViewController正是您想要的,请在application:didFinishLaunchingWithOptions:

中尝试以下内容
if (self.loginViewController) { //Define loginViewController in appDelegate.h
    [self dismissViewControllerAnimated:NO completion:^{
        [self presentViewController:mainViewController animated:YES completion:nil];
    }];
}
else{
    [self presentViewController:mainViewController animated:YES completion:nil];
}