更改根视图控制器并关闭所有视图控制器

时间:2016-11-28 00:17:37

标签: ios swift appdelegate

我有一个应用程序,如果我已经保存了用户facebookUID,我会将其显示为MainViewController并将其设置为rootViewController,如果没有,我在LoginViewController文件中以rootViewController作为AppDelegate.swift呈现它们。

MainViewController内,有一个SettingsViewController屏幕,我以模态方式呈现。在该设置屏幕内,我有一个注销按钮。

我的问题是,如何将rootViewController设置为LoginViewController,并在单击注销按钮时关闭堆栈中的所有其他控制器?

2 个答案:

答案 0 :(得分:2)

从本质上讲,这样做与在app委托中完成相同。但是你在应用代理中,所以你必须分步到达:

  1. 从UIApplication类中,您可以获得对shared应用程序对象的引用。

  2. 从那里,您可以获得该应用的delegate

  3. 从那里,您可以获得应用代表window

  4. 现在您可以设置窗口rootViewController

  5. 根视图控制器的视图控制器将在一团烟雾中消失,以及所有相关的视图控制器。

    (但是,这并不是会怎么做。我会有一个稳定的根视图控制器,其唯一的工作是将自定义父视图控制器作为LoginViewController或MainViewController。我不喜欢在应用程序中间更改根视图控制器的想法。但是,它并不违法。)

答案 1 :(得分:0)

试试这段代码。您可以切换到带有动画的登录屏幕。也没有保留旧的viewcontrollers层次结构的风险

if let appWindow = UIApplication.shared.delegate?.window {

        UIView.transition(with: appWindow!,
                          duration: 0.6,
                          options: UIViewAnimationOptions.transitionFlipFromRight,
                          animations: {
                            let loginVC = LoginVC.init(nibName: "LoginVC", bundle: nil)
                            appWindow?.rootViewController = loginVC
        },
                          completion: nil)
    }