使用标签栏控制器 -> 导航控制器 -> 视图层次结构 - iOS Swift 从应用程序委托呈现视图
Posted
技术标签:
【中文标题】使用标签栏控制器 -> 导航控制器 -> 视图层次结构 - iOS Swift 从应用程序委托呈现视图【英文标题】:Present view from app delegate with a tabbar Controller-> Nav controller -> View Hierarchy - iOS Swift 【发布时间】:2017-03-07 15:48:55 【问题描述】:我搜索了整个 S.O 并找到了类似的文章,但没有一个解决方案适合我。下面是我的视图层次结构的截图
我尝试过的众多sn-ps代码之一如下:
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
)
上面的代码显示了带有导航栏的正确选项卡,但是没有选项卡。
我想要一个强制触摸按钮,它显示带有导航栏和标签栏的标签,有人知道怎么做吗?
【问题讨论】:
为什么标签栏视图控制器呈现导航控制器?您需要在标签栏视图控制器中将导航控制器设置为当前控制器。您可能需要在标签栏视图控制器上设置视图控制器数组,其中此导航控制器是数组中的一项。 【参考方案1】:我目前无法对此进行全面测试,但我相信在标签栏中,您不会显示视图控制器。你设置它的视图控制器项目和 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() 来实际显示
【讨论】:
工作得很好,我最终编辑了 tabVc.viewController = [mynVC] 以在我的实际项目中添加另一个选项卡。这似乎产生了我正在寻找的确切结果。谢谢,要测试然后标记为已接受的答案。 太好了,很高兴得到帮助:) 祝项目顺利 快速提问,如果我想显示视图控制器,然后使用此实现转到另一个视图控制器。我可以直接调用“calcVc.performsegue(withIdentifier: "testSegue", sender: self)" 吗? 是的,您应该能够毫无问题地做到这一点。只要注册了segue以上是关于使用标签栏控制器 -> 导航控制器 -> 视图层次结构 - iOS Swift 从应用程序委托呈现视图的主要内容,如果未能解决你的问题,请参考以下文章