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

相关问题