2016-11-28 197 views
0

我具有其中如果我已經有用戶的facebookUID保存的應用程序,我提出將它們與MainViewController,並將其設置爲rootViewController,如果不,我提出將它們與LoginViewController作爲我的AppDelegate.swift文件中的rootViewController更改根視圖控制器和關閉所有視圖控制器

MainViewController的內部,有一個SettingsViewController屏幕,我模態地呈現。在該設置屏幕中,我有一個註銷按鈕。

我的問題是,如何設置rootViewControllerLoginViewController,並關閉在堆棧中的所有其他控制器時,他們單擊註銷按鈕?

回答

2

從本質上講,您可以完全按照您在應用程序代理中執行的操作。但你是在應用程序委託不,所以你必須在步驟到那裏:

  1. 從UIApplication類,你可以得到的shared應用程序對象的引用。

  2. 從那裏你可以得到應用程序的delegate

  3. 從那裏你可以得到應用程序代理的window

  4. 現在您可以設置窗口的rootViewController

視圖控制器根視圖控制器將在煙霧中消失,其所有的從屬視圖控制器沿。我有一個穩定的根視圖控制器,其唯一的作用是作爲LoginViewController或MainViewController的自定義父視圖控制器。我不是喜歡在應用程序中間改變根視圖控制器的想法,但它不是非法的。)

+0

我喜歡你的穩定視圖控制器的想法。只需設置它並使其工作。這是一個更清潔的IMO解決方案。謝謝! – Thomas

+1

謝謝,很高興你喜歡它。這是一個靈活的解決方案,因爲作爲自定義父視圖控制器,您在子視圖控制器之間切換時負責轉換動畫。 – matt

0

試試這個代碼。您可以使用動畫切換到登錄屏幕。也沒有保留舊的視圖控制器層次結構的風險

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) 
    } 
相關問題