ios - 将 viewController 解除到 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)
提前致谢。
解决方案
在 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()
}
}
}
推荐阅读
- tensorflow - 使用 MobileNet 重新训练图像检测
- php - Catch-all 应该将路径传递给 nginx 中的 index.php
- javascript - 如何将查询结果推送到 node.js 中的数组变量?
- azure - 从 azure 逻辑应用程序调用 POST api 时内容类型无效
- scala - Scala中单子内的可重入锁
- python - Tensorflow 是否具有类似于 python 中的 set() 的数据类型?
- git - 获取当前分支名称的最快方法,如果不在分支上,则获取适当的字符串
- postgresql - 如何将 PostgreSQL 数据加载到 GeoMesa(使用 Cassandra 数据存储)?
- ruby-on-rails - Rails 5:按 created_at 和 updated_at 排序
- ecmascript-6 - Redux combineReducers 与多个文件 - 犯简单的错误