1

我在整個S.O中搜索過並發現了類似的文章,但沒有一個解決方案適用於我。下面是我的看法層次的截圖 enter image description here從應用程序委託使用tabbar呈現當前視圖Controller-> Nav controller - > View Hierarchy - iOS Swift

一個代碼的許多片斷我已經試過如下:

  var storyBoard = UIStoryboard() 
      if UIDevice.current.userInterfaceIdiom == .pad { 
       storyBoard = UIStoryboard(name: "iPad", bundle: nil) 
      } else { 
       storyBoard = UIStoryboard(name: "Main", bundle: nil) 
      } 


      let tabVc = self.window?.rootViewController as! UITabBarController 


      let mynVC = storyBoard.instantiateViewController(withIdentifier: "nav") as! UINavigationController 


      let calcVc = storyBoard.instantiateViewController(withIdentifier: "destVc") 


      tabVc.present(mynVC, animated: true, completion: {() -> Void in 
       // Segue , do stuff 

      }) 

上面的代碼呈現一個導航欄正確的標籤,但有沒有書面禮物。

我想有一個強制觸摸按鈕,呈現與導航欄和標籤欄目前的標籤,有誰知道如何做到這一點?

+0

爲什麼是顯示導航控制器的標籤欄視圖控制器?您需要將導航控制器設置爲標籤欄視圖控制器中的當前控制器。您可能需要在標籤欄視圖控制器上設置視圖控制器數組,其中此導航控制器是數組中的項目之一。 –

回答

3

我目前無法完全測試這個,但我相信在標籤欄中,您不會呈現視圖控制器。您設置其視圖控制器項目和selectedViewController屬性。

這應該工作,稍後我會測試和更新,

var storyBoard = UIStoryboard() 
     if UIDevice.current.userInterfaceIdiom == .pad { 
      storyBoard = UIStoryboard(name: "iPad", bundle: nil) 
     } else { 
      storyBoard = UIStoryboard(name: "Main", bundle: nil) 
     } 


     let tabVc = self.window?.rootViewController as! UITabBarController 

     let mynVC = storyBoard.instantiateViewController(withIdentifier: "nav") as! UINavigationController 

     let calcVc = storyBoard.instantiateViewController(withIdentifier: "destVc") 

     tabVc.viewControllers = [mynVC] 
     tabVc.selectedViewController = mynVC 

根據還有什麼你有以下時,你可能還需要調用window.setKeyAndVisible()來實際顯示

+0

完美工作後,我最終編輯了tabVc.viewController = [mynVC],在我的實際項目中添加了其他選項卡。這似乎產生了我正在尋找的確切結果。謝謝你,測試然後標記爲已接受的答案。 – Jerland2

+0

太棒了,很高興的幫助:)與項目的好運 – Scriptable

+0

快速的問題,如果我想顯示視圖控制器然後繼續執行與此實現不同的一個。我只需要調用「calcVc.performsegue(withIdentifier:」testSegue「,sender:self)」? – Jerland2

相關問題