3

我有一个 RegistrationViewController 和一个 LoginViewController:

LoginViewController 是我的 InitialViewController/RootViewController。

如果我注册并单击注册按钮,它将自动推送到 MainViewController。如果我按下 Logout 按钮,它会被 RegistrationViewController 解散,这是因为我使用 [self dismissModalViewController animated:YES]。

  - (IBAction)logoutPressed:(id)sender {
  [self dismissModalViewControllerAnimated:YES];
   }

如果我按下注销按钮,我如何关闭 LoginViewController。

4

4 回答 4

6
-(void)dismissToRootViewController
{
    UIViewController *vc = self;
    while (vc.presentingViewController) {
        vc = vc.presentingViewController;
    }
    [vc dismissViewControllerAnimated:YES completion:nil];
}
于 2015-07-23T04:24:05.400 回答
5

您可以使用 UINavigationController 方法-popToRootViewControllerAnimated:

- (IBAction)logoutPressed:(id)sender {
    [self.navigationController popToRootViewControllerAnimated:YES];
}

如果您是在谈论多个模态视图在另一个之上呈现,您可以通过将-dismissViewControllerAnimated:completion:或更旧的发送-dismissModalViewControllerAnimated:到堆栈中的最低视图来消除所有这些视图,如文档中所述:

如果您连续呈现多个视图控制器,从而构建一个呈现视图控制器的堆栈,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图控制器上方的所有视图控制器。发生这种情况时,只有最顶层的视图会以动画方式消失

于 2012-05-02T09:32:06.033 回答
3

试试看,对我有用。

 [[[UIApplication sharedApplication] keyWindow].rootViewController dismissViewControllerAnimated:YES completion:nil];
于 2017-10-25T07:16:28.473 回答
0

如果您使用 UINavigationController 使用 View Controller 堆栈,使用以下方法是明智的。

1. Pop the current top ViewController use
 [[self navigationController] popViewControllerAnimated:YES];

2. Pop to RootViewController use
[[self navigationController] popToRootViewControllerAnimated:YES];

3. For that matter popping to any ViewController use
 [[self navigationController] popToViewController:viewController animated:YES];
于 2016-05-24T09:37:45.000 回答