更改根视图控制器和关闭所有视图控制器

问题描述:

我具有其中如果我已经有用户的facebookUID保存的应用程序,我提出将它们与MainViewController,并将其设置为rootViewController,如果不,我提出将它们与LoginViewController作为我的AppDelegate.swift文件中的rootViewController更改根视图控制器和关闭所有视图控制器

MainViewController的内部,有一个SettingsViewController屏幕,我模态地呈现。在该设置屏幕中,我有一个注销按钮。

我的问题是,如何设置rootViewControllerLoginViewController,并关闭在堆栈中的所有其他控制器时,他们单击注销按钮?

从本质上讲,您可以完全按照您在应用程序代理中执行的操作。但你是在应用程序委托不,所以你必须在步骤到那里:

  1. 从UIApplication类,你可以得到的shared应用程序对象的引用。

  2. 从那里你可以得到应用程序的delegate

  3. 从那里你可以得到应用程序代理的window

  4. 现在您可以设置窗口的rootViewController

视图控制器根视图控制器将在烟雾中消失,其所有的从属视图控制器沿。我有一个稳定的根视图控制器,其唯一的作用是作为LoginViewController或MainViewController的自定义父视图控制器。我不是喜欢在应用程序中间改变根视图控制器的想法,但它不是非法的。)

+0

我喜欢你的稳定视图控制器的想法。只需设置它并使其工作。这是一个更清洁的IMO解决方案。谢谢! – Thomas

+1

谢谢,很高兴你喜欢它。这是一个灵活的解决方案,因为作为自定义父视图控制器,您在子视图控制器之间切换时负责转换动画。 – matt

试试这个代码。您可以使用动画切换到登录屏幕。也没有保留旧的视图控制器层次结构的风险

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) 
    }