【问题标题】:Issue on dismissing a viewController to rootViewController将 viewController 解除到 rootViewController 的问题
【发布时间】:2019-08-27 03:40:20
【问题描述】:

我试图在注销时将 viewController 解除到 rootViewController。但问题是 viewController 没有被解雇,它仍然保留在同一页面本身。 下面我已经提到了我使用的代码。

    let AppDel = UIApplication.shared.delegate as! AppDelegate
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let login = mainStoryboard.instantiateViewController(withIdentifier: "login")
    let nav = UINavigationController(rootViewController: login)
    AppDel.window!.rootViewController = nav
    AppDel.window?.rootViewController?.dismiss(animated: true, completion: nil)
    (AppDel.window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: true)
    login.navigationController?.setNavigationBarHidden(true, animated: false)

提前致谢。

【问题讨论】:

  • 为什么叫“popToRootViewController”?您可以将“AppDel.window?.rootViewController.navigationController.setViewControllers”与根 viewController 和动画一起使用。

标签: ios swift rootviewcontroller dismissviewcontroller


【解决方案1】:

之前,我也遇到过同样的问题。成功关闭控制器后,我通过执行所有其他操作解决了问题。

请参考下面的示例代码。我相信它会为你工作。

    AppDel.window?.rootViewController?.dismiss(animated: true, completion: {
        (AppDel.window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: true)
        login.navigationController?.setNavigationBarHidden(true, animated: false)    
    })

【讨论】:

  • 很高兴听到!快乐编码
【解决方案2】:

在 App 委托中键入一个函数,该函数接受新的视图控制器并将其设置为 root。而不是解雇旧的。

func updateRootViewController(with viewController: UIViewController) {
        guard let oldViewController = self.window?.rootViewController else { return }
        UIView.transition(from: oldViewController.view, to: viewController.view, duration: 0.3, options: [.transitionCrossDissolve, .allowAnimatedContent]) { _ in
            self.window!.rootViewController = viewController
            self.window!.makeKeyAndVisible()
            oldViewController.dismiss(animated: false) {
                oldViewController.view.removeFromSuperview()
            }
        }
    }

【讨论】:

    【解决方案3】:
    • 为什么在调用 popToRootViewController 之前关闭导航控制器?

    AppDel.window?.rootViewController?.dismiss(动画:真,完成: 无)

    • 检查您是否从主线程调用它。 在此块中添加您的代码:

      DispatchQueue.main.async {
          // TODO: Your code
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多