移动到根视图控制器而不显示子视图

Posted

技术标签:

【中文标题】移动到根视图控制器而不显示子视图【英文标题】:Moving to root view controller without showing child views 【发布时间】:2017-05-30 06:08:48 【问题描述】:

我想关闭所有子视图并最终移至根视图控制器。我使用了以下代码

DispatchQueue.main.async 
        appDelegate.window?.rootViewController?.dismiss(animated: false, completion:nil)

但问题是,在移动到根视图时,它首先显示子视图,然后是根视图。

我该如何解决这个问题?有什么想法吗?

【问题讨论】:

试试这个var vc: UIViewController? = presentingViewController while ((vc?.presentingViewController) != nil) vc = vc?.presentingViewController vc?.dismiss(animated: true, completion: _ in ) 你试过(UIApplication.shared.keyWindow?.rootViewController as?UINavigationController)?.popToRootViewController(animated: false) 问题依然存在。 您使用哪种方法显示新的ViewController ... PUSH 或 PRESENT? 当您跳转到第一个 viewController(在 appdelegate 等中)时,使用相同的代码。 【参考方案1】:

使用导航控制器对象的popToRootViewController方法。

例如:[self.navigationController popToRootViewControllerAnimated:YES];

此方法将弹出当前视图控制器到根视图控制器之间的所有视图控制器,从而弹出到根视图控制器。

【讨论】:

移动到根视图效果很好,但不知道为什么它先显示子视图然后显示根视图。【参考方案2】:

使用它会关闭所有呈现的UIViewController's 并转到 rootViewcontroller

self.view.window!.rootViewController?.dismiss(animated: false, completion: nil)

如果你从其他地方调用它,你需要传递控制器并将 self 替换为控制器

【讨论】:

实际上我有 2 个子视图和一个根视图。我打电话给第二个孩子的解雇。所以它显示第一个孩子,然后显示根视图。不知道为什么它显示这个中间子窗口而不是直接根窗口 视图还是视图控制器? 我的意思是视图控制器 好的...试试这个...self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)

以上是关于移动到根视图控制器而不显示子视图的主要内容,如果未能解决你的问题,请参考以下文章

UIViewController 根视图中的 UITableView 显示

TempData 仅显示在子局部视图中,而不显示在父局部视图中

UICollectionView 子视图平移移动而不滚动

在 iOS 8 中转到另一个视图控制器而不显示第一个视图控制器

如何使用自动布局在两个子视图控制器之间移动?

添加为子视图的 NSView 不显示