我有一个应用程序,如果我已经保存了用户facebookUID
,我会将其显示为MainViewController
并将其设置为rootViewController
,如果没有,我在LoginViewController
文件中以rootViewController
作为AppDelegate.swift
呈现它们。
在MainViewController
内,有一个SettingsViewController
屏幕,我以模态方式呈现。在该设置屏幕内,我有一个注销按钮。
我的问题是,如何将rootViewController
设置为LoginViewController
,并在单击注销按钮时关闭堆栈中的所有其他控制器?
答案 0 :(得分:2)
从本质上讲,这样做与在app委托中完成相同。但是你在应用代理中不,所以你必须分步到达:
从UIApplication类中,您可以获得对shared
应用程序对象的引用。
从那里,您可以获得该应用的delegate
。
从那里,您可以获得应用代表window
。
现在您可以设置窗口rootViewController
。
根视图控制器的视图控制器将在一团烟雾中消失,以及所有相关的视图控制器。
(但是,这并不是我会怎么做。我会有一个稳定的根视图控制器,其唯一的工作是将自定义父视图控制器作为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)
}