如何从模态视图中弹出ToRootViewController?

Posted

技术标签:

【中文标题】如何从模态视图中弹出ToRootViewController?【英文标题】:How to popToRootViewController from within a modal view? 【发布时间】:2011-05-02 06:31:44 【问题描述】:

我有一组典型的 UITableViewController 视图。在所有视图上都有一个按钮,用于显示模型视图。在那个设置视图上有一个按钮。我希望该按钮关闭模式视图在 UITableViewController 的 navigationController 上实现 popToRootViewController。

关闭模态视图很容易:

[self dismissModalViewControllerAnimated:NO];

而且效果很好。我试过这个来弹出主 UITableViewController:

[self.parentViewController.navigationController popToRootViewControllerAnimated:NO];

什么都没有发生。

我可能可以实现一个委托来实现这一点,但是有相当多的视图控制器具有相同的设置按钮(还有更多),因此更倾向于找到一个不需要在每个视图控制器中添加额外代码的解决方案.

非常感谢!

【问题讨论】:

【参考方案1】:

查看 rdelmal (https://***.com/a/16311935/1395563) 的答案,这对我来说就像一个魅力。我在模态视图中的操作中使用此代码。

[(UINavigationController *)self.presentingViewController  popToRootViewController:NO];
[self dismissViewControllerAnimated:YES completion:nil];

【讨论】:

【参考方案2】:

试试

[[[[UIApplication sharedApplication].keyWindow] rootViewController] popToRootViewController:YES];

【讨论】:

缺少navigationController(因此无法编译),但即使添加为 [[[[UIApplication sharedApplication].keyWindow rootViewController] navigationController] popToRootViewControllerAnimated:YES];它编译但什么也不做。【参考方案3】:

找不到这样的解决方案,所以我实现了一个可以正常工作的协议/委托。只是:

[self.navigationController popToRootViewControllerAnimated:NO];

在委托调用中。

【讨论】:

【参考方案4】:

在你的 appdelegate 文件中添加一个方法

-(void)GotoRoot
[self.navigationController popToRootViewControllerAnimated:YES];

现在在你的注销按钮上的课堂上调用它

[self dismissModalViewControllerAnimated:NO];
[(TestAppDelegate *)[[UIApplication sharedApplication] delegate]) GotoRoot];

请恢复结果;

【讨论】:

【参考方案5】:

这对我有用

[[self parentViewController] popToRootViewControllerAnimated:NO]

【讨论】:

以上是关于如何从模态视图中弹出ToRootViewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何从堆栈中弹出视图控制器而不导航到它们

从导航堆栈中弹出视图控制器时从右侧滑入

SwiftUI - 如何在 SwiftUI 中弹出到特定视图?

当特定 ViewController 类被推入另一个选项卡中的堆栈时,如何从堆栈中弹出视图控制器?

如何从 UICollectionView 中弹出一个 uicollectionViewCell?

为啥从导航堆栈中弹出视图时键盘不显示?