移动到根视图控制器而不显示子视图
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 仅显示在子局部视图中,而不显示在父局部视图中