更改根视图控制器和关闭所有视图控制器
问题描述:
我具有其中如果我已经有用户的facebookUID
保存的应用程序,我提出将它们与MainViewController
,并将其设置为rootViewController
,如果不,我提出将它们与LoginViewController
作为我的AppDelegate.swift
文件中的rootViewController
。更改根视图控制器和关闭所有视图控制器
在MainViewController
的内部,有一个SettingsViewController
屏幕,我模态地呈现。在该设置屏幕中,我有一个注销按钮。
我的问题是,如何设置rootViewController
为LoginViewController
,并关闭在堆栈中的所有其他控制器时,他们单击注销按钮?
答
从本质上讲,您可以完全按照您在应用程序代理中执行的操作。但你是在应用程序委托不,所以你必须在步骤到那里:
从UIApplication类,你可以得到的
shared
应用程序对象的引用。从那里你可以得到应用程序的
delegate
。从那里你可以得到应用程序代理的
window
。现在您可以设置窗口的
rootViewController
。
视图控制器是根视图控制器将在烟雾中消失,其所有的从属视图控制器沿。我有一个稳定的根视图控制器,其唯一的作用是作为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)
}
我喜欢你的稳定视图控制器的想法。只需设置它并使其工作。这是一个更清洁的IMO解决方案。谢谢! – Thomas
谢谢,很高兴你喜欢它。这是一个灵活的解决方案,因为作为自定义父视图控制器,您在子视图控制器之间切换时负责转换动画。 – matt