解雇 RootViewController?

Posted

技术标签:

【中文标题】解雇 RootViewController?【英文标题】:Dismiss to RootViewController? 【发布时间】:2012-05-02 09:31:07 【问题描述】:

我有一个 RegistrationViewController 和一个 LoginViewController:

LoginViewController 是我的 InitialViewController/RootViewController。

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

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

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

【问题讨论】:

【参考方案1】:
-(void)dismissToRootViewController

    UIViewController *vc = self;
    while (vc.presentingViewController) 
        vc = vc.presentingViewController;
    
    [vc dismissViewControllerAnimated:YES completion:nil];

【讨论】:

【参考方案2】:

您可以使用 UINavigationController 方法-popToRootViewControllerAnimated:

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

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

如果你连续呈现几个视图控制器,从而构建一个 呈现的视图控制器堆栈,在视图上调用此方法 堆栈中较低的控制器关闭其直接子视图 控制器和堆栈上该子级上方的所有视图控制器。 发生这种情况时,只有最顶层的视图会在动画中消失 时尚

【讨论】:

sry 伙计们,我忘了提到登录和注册是模态视图。所以这段代码不起作用 @Bashud 编辑解释在模态视图控制器的情况下应该做什么。但是,您的问题确实说“推送”,这意味着它们被推送到导航堆栈上。这就是为什么我最初专注于从导航堆栈中弹出。【参考方案3】:

试试吧,对我有用。

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

【讨论】:

【参考方案4】:

如果您使用 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];

【讨论】:

以上是关于解雇 RootViewController?的主要内容,如果未能解决你的问题,请参考以下文章

UI基础 UITextField

ViewController 关闭 swift ios

如何在新窗口中推送 ViewController

打开窗口+来自其他视图控制器的视图

在从一个故事板解雇到另一个故事板时,它最近很快就被解雇了

赶上BottomSheetDialogFragment的解雇