解雇RootViewController?

时间:2012-05-02 09:31:08

标签: iphone ios xcode

我有一个RegistrationViewController和一个LoginViewController:

LoginViewController是我的InitialViewController / RootViewController。

如果我注册并单击Registrate-Button,它将自动推送到MainViewController。如果我按下Logout-Button,它会关闭到RegisterViewController,这是因为我使用[self dismissModalViewController animated:YES]。

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

如果我按下Logout-Button,我如何解除对LoginViewController。

4 个答案:

答案 0 :(得分:5)

您可以使用UINavigationController方法-popToRootViewControllerAnimated:

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

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

  

如果你连续出现几个视图控制器,那么建立一个   堆栈的呈现视图控制器,在视图上调用此方法   堆栈中较低的控制器会解除其直接的子视图   控制器和堆栈上该子节点上方的所有视图控制器。   发生这种情况时,只有最顶层的视图在动画中被解除   时尚

答案 1 :(得分:4)

-(void)dismissToRootViewController
{
    UIViewController *vc = self;
    while (vc.presentingViewController) {
        vc = vc.presentingViewController;
    }
    [vc dismissViewControllerAnimated:YES completion:nil];
}

答案 2 :(得分:3)

试试吧,为我工作。

 [[[UIApplication sharedApplication] keyWindow].rootViewController dismissViewControllerAnimated:YES completion:nil];

答案 3 :(得分:0)

如果您使用UINavigationController使用堆栈视图控制器,那么使用以下方法是明智的。

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];