【问题标题】:How to dinit all View Controller?如何初始化所有视图控制器?
【发布时间】:2018-06-14 06:48:04
【问题描述】:

当用户注销并导航到loginVC 时,我想删除所有正在运行的视图控制器。

我的代码:

  let nvcMain = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()

    for view in (UIApplication.shared.keyWindow?.subviews)!{
        view.removeFromSuperview()
    }

    UIApplication.shared.delegate?.window!!.rootViewController = nvcMain   

它重定向到LoginVC,但我的其他 ViewController 仍然打开。(我从调试视图层次结构中检查过)并消耗内存。
所以我想删除所有其他viewControllers
有人可以提供一些解决方案或建议吗?

【问题讨论】:

  • 您不必从 keywindow 中删除所有 ViewController/Views,而只需重置应该完成工作的 rootViewController
  • 我也这样做了...但调试视图层次结构显示仍处于打开状态
  • 我以前从未遇到过这个问题,但我相信你一定是对ViewController 有强烈的引用,这会阻止他们去初始化

标签: ios swift hierarchy


【解决方案1】:

您可以像这样使用注销选项:

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let loginVC = storyBoard.instantiateViewController(withIdentifier: "LoginVC") as! LoginVC
let nav = UINavigationController(rootViewController:loginVC)
UIApplication.shared.delegate?.window!.rootViewController = nav

希望这有帮助。

【讨论】:

  • 没有任何区别。
  • 我在我的项目中使用它并且工作正常。你能解释一下吗?所以我会努力解决的。
【解决方案2】:

放松转场

注销时最好使用 Unwind Segues ,很容易实现。

阅读此article about unwind segues

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多