关于将viewController撤消到rootViewController的问题

时间:2019-04-05 09:11:03

标签: ios swift rootviewcontroller dismissviewcontroller

我正在尝试在注销时将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)

谢谢。

3 个答案:

答案 0 :(得分:1)

在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()
            }
        }
    }

答案 1 :(得分:1)

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

请参考下面的示例代码。我确信它将为您服务。

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

答案 2 :(得分:0)

  • 为什么在调用 popToRootViewController 之前解雇了导航控制器?
  

AppDel.window?.rootViewController?.dismiss(动画:true,完成:   零)

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

    input(3)