我不知道您的确切用例是什么,但在我的应用程序中,无论他当时碰巧在哪个视图控制器中,用户都可以随时注销。然后我需要显示登录屏幕并让用户有机会重新登录,如果登录成功,则将用户放回原处。
这一切意味着我不能将登录视图控制器设为根并在其上堆叠其他控制器,因为如果用户退出,我不能将它们全部弹出。
但是,我可以保存 VC 堆栈并换出到登录屏幕,然后在登录成功时换回主 VC 堆栈。
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var primaryViewController: UIViewController?
var loginViewController: UIViewController?
func userLoggedOut() {
self.window?.rootViewController = loginViewController
}
func userLoggedIn() {
self.window?.rootViewController = primaryViewController
}
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// other setup code
let storyboard = UIStoryboard(name: "Main", bundle: nil)
loginViewController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController") as? UIViewController
primaryViewController = self.window?.rootViewController
if (!currentlyLoggedIn) {
userLoggedOut()
}
return true
}