问题描述
我有登录页面,我试图在其中推送每个ViewController,并在成功验证后立即尝试使用代码设置根视图
UIApplication.shared.delegate?.window??.rootViewController = UIStoryboard.init(name: "Main",bundle: nil).instantiateViewController(withIdentifier: "Some") as! Some
上面的代码不起作用,并且注销还通过设置根视图控制器进行设置,但是这些命令不起作用。请帮帮我。预先感谢。
Login 1st page(navigationController.pushVc)
-> Success Verification (setting root view controller)
-> Logout(setting root view controller)
。
我给标签栏控制器和导航控制器都赋予了标识符。尝试了很多方法,但是找不到解决方法
也尝试了此链接https://fluffy.es/how-to-transition-from-login-screen-to-tab-bar-controller/
上面的链接与我尝试的相同。但是不能在我的项目中完成。
解决方法
我在这里复制我的方法,以便在登录和注销后切换rootViewController。我已经在AppDelegate中编写了此方法:
public func setRootVC(){
if UserDefaults.standard.object(forKey: Strings.LOGGED_IN) != nil {
let storyboard = UIStoryboard(name: "Main",bundle: Bundle.main)
let tabbarVC = storyboard.instantiateViewController(withIdentifier: ViewControllerIdentifiers.TabbarController)
self.window?.rootViewController = tabbarVC
self.window?.makeKeyAndVisible()
}
else{
let storyboard = UIStoryboard(name: "Profile",bundle: Bundle.main)
let loginNavController = storyboard.instantiateViewController(withIdentifier: ViewControllerIdentifiers.LoginNavController) as? UINavigationController
self.window?.rootViewController = loginNavController
self.window?.makeKeyAndVisible()
}
}
从我的viewController调用此方法:
@IBAction func signoutBtnClicked(_ sender: Any) {
if UserDefaults.standard.object(forKey: Strings.LOGGED_IN) != nil {
UserDefaults.standard.removeObject(forKey: Strings.LOGGED_IN)
}
self.appDelegate.setRootVC()
}
要访问'self.appDelegate,我已在我的viewController中添加了此扩展名
extension UIViewController {
var appDelegate: AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
}