将 viewController 解除到 rootViewController 的问题
Issue on dismissing a viewController to rootViewController
我试图在注销时将 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?.dismiss(animated: true, completion:
nil)
检查您是否从主线程调用它。
在此块中添加您的代码:
DispatchQueue.main.async {
// TODO: Your code
}
在 App delegate 中键入一个接受新视图控制器并将其设置为根的函数。而不是解雇旧的。
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()
}
}
}
早些时候,我遇到过同样的问题。我在成功关闭控制器后通过执行所有其他操作解决了问题。
请参考下面的示例代码。我相信它对你有用。
AppDel.window?.rootViewController?.dismiss(animated: true, completion: {
(AppDel.window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: true)
login.navigationController?.setNavigationBarHidden(true, animated: false)
})
我试图在注销时将 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?.dismiss(animated: true, completion: nil)
检查您是否从主线程调用它。 在此块中添加您的代码:
DispatchQueue.main.async { // TODO: Your code }
在 App delegate 中键入一个接受新视图控制器并将其设置为根的函数。而不是解雇旧的。
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()
}
}
}
早些时候,我遇到过同样的问题。我在成功关闭控制器后通过执行所有其他操作解决了问题。
请参考下面的示例代码。我相信它对你有用。
AppDel.window?.rootViewController?.dismiss(animated: true, completion: {
(AppDel.window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: true)
login.navigationController?.setNavigationBarHidden(true, animated: false)
})