我正在尝试在注销时将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)
谢谢。
答案 0 :(得分:1)
键入一个函数,该函数采用新的视图控制器并将其设置为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)
AppDel.window?.rootViewController?.dismiss(动画:true,完成: 零)
检查是否从主线程调用此函数。 在此块中添加代码:
input(3)