【问题标题】: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 等中)时,使用相同的代码。

标签: ios swift uiviewcontroller childviewcontroller rootviewcontroller


【解决方案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)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多