如何在 ios swift 中以编程方式将情节提要视图控制器加载到标签栏控制器中?

Posted

技术标签:

【中文标题】如何在 ios swift 中以编程方式将情节提要视图控制器加载到标签栏控制器中?【英文标题】:How to load storyboard viewcontroller into programmatically tabbar controller in ios siwft? 【发布时间】:2020-03-06 20:59:33 【问题描述】:

我有以编程方式完成的标签栏控制器。并且标签栏工作正常。在 stroyboard 中,我创建了 firstViewController 并分配了类名 firstViewController。当我尝试在选项卡栏控制器上的第一个 vc 上进行选项卡导航到第一个视图控制器时,它崩溃了。如果我以编程方式给出意味着它可以正常工作。

如何以编程方式从标签栏控制器导航到情节提要视图控制器。

这是我的标签栏控制器代码:

 let tabBarCnt = UITabBarController()
 func createTabBarController() 

    let firstVC = FViewController()
    firstVC.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 0)

    let secondVC = SViewController()
    secondVC.tabBarItem = UITabBarItem(tabBarSystemItem: .more, tag: 1)

    let thirdVC = ViewController()
    thirdVC.tabBarItem = UITabBarItem(tabBarSystemItem: .history, tag: 2)

    let fourthVC = ViewController()
    fourthVC.tabBarItem = UITabBarItem(tabBarSystemItem: .downloads, tag: 3)


    if UIDevice.current.userInterfaceIdiom == .pad 
        let controllerArray = [firstVC, secondVC, thirdVC, fourthVC]
        tabBarCnt.viewControllers = controllerArray.map UINavigationController.init(rootViewController: $0)

        self.view.addSubview(tabBarCnt.view)
     else 
        let controllerArray = [firstVC, secondVC]
        tabBarCnt.viewControllers = controllerArray.map UINavigationController.init(rootViewController: $0)

        self.view.addSubview(tabBarCnt.view)
    


这是我的firstViewController的firstVC代码:

import UIKit

class FViewController: UIViewController, UITabBarDelegate 

@IBOutlet weak var firstBtn: UIButton!

@IBOutlet weak var fview: UIView!
override func viewDidLoad() 
    super.viewDidLoad()

    self.view.backgroundColor =  UIColor.blue
 // self.fview.backgroundColor = .brown


    // Do any additional setup after loading the view.
   



【问题讨论】:

点击此链接:What is a StoryBoard ID and how can i use this? 什么是崩溃报告 它的显示为零.. 查看此以获得更多帮助:How add tabs programmatically in UITabBarController with swift? 【参考方案1】:

请尝试以下代码。您可以通过界面生成器提供视图控制器标识符。

let tabBarCnt = UITabBarController()
func createTabBarController() 
let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
let firstVC = storyboard?.instantiateViewControllerWithIdentifier("FViewController")
firstVC.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 0)

let secondVC = storyboard?.instantiateViewControllerWithIdentifier("SViewController")
secondVC.tabBarItem = UITabBarItem(tabBarSystemItem: .more, tag: 1)

let thirdVC = storyboard?.instantiateViewControllerWithIdentifier("ViewController")
thirdVC.tabBarItem = UITabBarItem(tabBarSystemItem: .history, tag: 2)

let fourthVC = storyboard?.instantiateViewControllerWithIdentifier("ViewController")
fourthVC.tabBarItem = UITabBarItem(tabBarSystemItem: .downloads, tag: 3)

   var controllerArray = [firstVC, secondVC]
if UIDevice.current.userInterfaceIdiom == .pad 
      controllerArray += [thirdVC, fourthVC]        
 
     tabBarCnt.viewControllers = controllerArray.map UINavigationController.init(rootViewController: $0)
    self.view.addSubview(tabBarCnt.view)

【讨论】:

【参考方案2】:

因此,以编程方式创建导航控制器,然后将 FirstVC 或 XVC 分配为该导航控制器的根。已对所有选项卡重复此操作。

因此,在情节提要中,您需要使用导航控制器而不是拖动视图控制器。我附上了截图。

默认它将 TableViewVC 作为导航控制器的根目录

【讨论】:

以上是关于如何在 ios swift 中以编程方式将情节提要视图控制器加载到标签栏控制器中?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中以编程方式从 MainViewController 切换到 .xib 视图?

在页面视图控制器中以编程方式使用情节提要中的视图控制器

如何在swift中以编程方式打开一个新的tableview

Swift 5. 如何在按钮触摸时呈现或显示 ViewController?没有情节提要(以编程方式)

iOS:如何以编程方式将视图添加到情节提要视图

如何在标准 UITableViewCell 中以编程方式自动布局右侧的自定义 UIButton。