更改根视图控制器并关闭所有视图控制器
Change root view controller and dismiss all view controllers
我有一个应用程序,如果我已经保存了用户的 facebookUID
,我会向他们显示 MainViewController
并将其设置为 rootViewController
,如果没有,我在我的 AppDelegate.swift
文件中将 LoginViewController
作为 rootViewController
呈现给他们。
在 MainViewController
内,有一个 SettingsViewController
屏幕,我以模态方式呈现。在该设置屏幕内,我有一个注销按钮。
我的问题是,如何将 rootViewController
设置为 LoginViewController
,并在单击注销按钮时关闭堆栈中的所有其他控制器?
从本质上讲,您执行此操作的方式与您在应用程序委托中执行的方式完全相同。但是你不是在app delegate中,所以你必须一步一步来:
从 UIApplication class 您可以获得对 shared
应用程序对象的引用。
从那里您可以获得应用程序的 delegate
。
从那里你可以获得应用委托的 window
。
现在您可以设置 window 的 rootViewController
。
曾是根视图控制器的视图控制器及其所有从属视图控制器将在一阵烟雾中消失。
(然而,这并不是 I 会做的。我会有一个稳定的根视图控制器,它唯一的工作是自定义父视图控制器到LoginViewController 或 MainViewController。我不喜欢在应用程序中间更改根视图控制器的想法。不过,这并不违法。)
试试这个代码。您可以切换到带有动画的登录屏幕。也没有保留旧视图控制器层次结构的风险
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)
}
我有一个应用程序,如果我已经保存了用户的 facebookUID
,我会向他们显示 MainViewController
并将其设置为 rootViewController
,如果没有,我在我的 AppDelegate.swift
文件中将 LoginViewController
作为 rootViewController
呈现给他们。
在 MainViewController
内,有一个 SettingsViewController
屏幕,我以模态方式呈现。在该设置屏幕内,我有一个注销按钮。
我的问题是,如何将 rootViewController
设置为 LoginViewController
,并在单击注销按钮时关闭堆栈中的所有其他控制器?
从本质上讲,您执行此操作的方式与您在应用程序委托中执行的方式完全相同。但是你不是在app delegate中,所以你必须一步一步来:
从 UIApplication class 您可以获得对
shared
应用程序对象的引用。从那里您可以获得应用程序的
delegate
。从那里你可以获得应用委托的
window
。现在您可以设置 window 的
rootViewController
。
曾是根视图控制器的视图控制器及其所有从属视图控制器将在一阵烟雾中消失。
(然而,这并不是 I 会做的。我会有一个稳定的根视图控制器,它唯一的工作是自定义父视图控制器到LoginViewController 或 MainViewController。我不喜欢在应用程序中间更改根视图控制器的想法。不过,这并不违法。)
试试这个代码。您可以切换到带有动画的登录屏幕。也没有保留旧视图控制器层次结构的风险
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)
}