簡體   English   中英

更改根視圖控制器

[英]Change root View Controller

我在應用程序中更改root時遇到問題。

在此處輸入圖片說明

我的應用程序的設計。 登錄應用程序后,我想將root vc更改為UITabBarViewController來清理堆棧。

我遇到了多個問題。

  1. 將vc設置為應用登錄操作->或底部vc中的選項卡欄:

     self.performSegue(withIdentifier: "goToMainTabBar", sender: nil) override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? TabBarViewController { UIApplication.shared.keyWindow?.rootViewController = vc } } 

該應用程序將崩潰:

Application tried to present modal view controller on itself. Presenting controller is TabBarViewController
  1. 下一個問題是,如果我們在TabBarViewController viewDidLoaded設置一個根。

    UIApplication.shared.keyWindow?.rootViewController = self

嵌入在UINavigationController選項卡欄項自身沒有導航控制器,因此不會實例化Nav vc嗎? 因為我將進入項目vc child->我再也不能支持了。 如果我不更改根vc,那一切都很好。

對於1),您不能使用segue呈現視圖控制器,然后使用它來替換prepare中的根視圖控制器。 您將需要從情節提要中實例化選項卡視圖控制器,然后替換根視圖控制器。

像這樣:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "TabController")
UIApplication.shared.keyWindow?.rootViewController = vc

(假設情節提要被稱為“主要”,並且您為標簽頁控制器提供了情節提要ID“ TabController”。

對於2的問題,我不太清楚。

但是,作為一般性注釋,我將采取不同的方法,而不是使用登錄控制器作為您的初始視圖控制器,而使用標簽欄作為初始控制器,然后在應用程序首次啟動時僅顯示登錄控制器。 這樣一來,您就可以避免完全替換根控制器,並且可以更好地控制根控制器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM