解雇 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?的主要内容,如果未能解决你的问题,请参考以下文章