Ios 更改根视图控制器并关闭所有视图控制器
我有一个应用程序,如果我已经保存了用户的Ios 更改根视图控制器并关闭所有视图控制器,ios,swift,appdelegate,Ios,Swift,Appdelegate,我有一个应用程序,如果我已经保存了用户的facebookUID,我会向他们显示MainViewController,并将其设置为rootViewController,如果没有,我在AppDelegate.swift文件中将LoginViewController作为rootViewController呈现给他们 在MainViewController中,有一个设置viewcontroller屏幕,我以模式显示。在设置屏幕内,我有一个注销按钮 我的问题是,如何将rootViewController设
facebookUID
,我会向他们显示MainViewController
,并将其设置为rootViewController
,如果没有,我在AppDelegate.swift
文件中将LoginViewController
作为rootViewController
呈现给他们
在MainViewController
中,有一个设置viewcontroller
屏幕,我以模式显示。在设置屏幕内,我有一个注销按钮
我的问题是,如何将
rootViewController
设置为LoginViewController
,并在单击注销按钮时关闭堆栈中的所有其他控制器?实际上,您的操作方式与在应用程序委托中的操作方式完全相同。但您不在应用程序代理中,因此您必须分步到达:
共享
应用程序对象的引用委托
窗口
rootViewController
(这不是我要怎么做的。我有一个稳定的根视图控制器,它的唯一任务是定制父视图控制器到LoginViewController或MeView控制器。我不喜欢在应用程序中间改变根视图控制器的想法。但是,这不是非法的。)< /P> < P>试试这个代码。您可以切换到带有动画的登录屏幕。也没有保留旧ViewController层次结构的风险
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)
}
我喜欢你关于稳定视图控制器的想法。把它安装好,让它工作。这是一个更清洁的解决方案。谢谢!谢谢,很高兴你喜欢。这是一个灵活的解决方案,因为作为自定义父视图控制器,在子视图控制器之间切换时,您负责转换动画。