在当前视图控制器中关闭先前的模态视图控制器

tny*_*lee 3 xcode objective-c uiviewcontroller ios ios7

我现在有3个ViewControllers: LoginViewController,SignUpViewControllerMainViewController.

当用户打开应用程序时,LoginViewController将显示.如果用户第一次使用该应用程序,则他们必须注册,"注册"按钮位于LoginViewController."注册"按钮将显示SignUpViewController.

用户完成注册后.在MainViewController将提交.

我想做的是.在MainViewController那里将有一个"注销"按钮.当用户按下它时MainViewController应该被解雇并且LoginViewController应该在那里.用户不应该SignUpViewController第二次看到.

这是我尝试过的:

1)解散SignUpViewController并出现MainViewController在"注册"按钮中:

- (void) signUpClicked
{
MainViewController *mainViewController = [viewController.storyboard instantiateViewControllerWithIdentifier:@"MainViewController"];

        [viewController presentViewController:mainViewController animated:YES completion:^{
            [viewController dismissViewControllerAnimated:NO completion:^{

            }];

        }];
}
Run Code Online (Sandbox Code Playgroud)

2)MainViewController装载时,解雇SignUpViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    SignUpViewController *signUpViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SignUpViewController"];
    [signUpViewController dismissViewControllerAnimated:NO completion:^{

    }];

}
Run Code Online (Sandbox Code Playgroud)

tny*_*lee 5

得到它了.我将SignUpViewController传递给MainViewController并解除了MainViewController中的SignUpViewController.

对于任何与我有同样问题的人.

SignUpViewController.m

- (void) signUpButtonClicked
{
        MainViewController *mainViewController = [viewController.storyboard instantiateViewControllerWithIdentifier:@"MainViewController"];
        mainViewController.signUpViewController = viewController;

        [viewController presentViewController:mainViewController animated:YES completion:^{            
        }];
}
Run Code Online (Sandbox Code Playgroud)

MainViewController.m

- (IBAction)logoutClicked:(id)sender
{

    [self dismissViewControllerAnimated:YES completion:^{

        [self.signUpViewController dismissViewControllerAnimated:NO completion:^{

        }];

    }];
}
Run Code Online (Sandbox Code Playgroud)