如何在iOS siwft中以编程方式将情节提要ViewController加载到Tabbar控制器中?

我有以编程方式完成的Tabbar控制器。和选项卡栏工作正常。在stroyboard中,我创建了firstViewController并分配了类名firstViewController。当我尝试在标签栏控制器上的第一个vc标签上导航到第一个viewcontroller时,它崩溃了。如果我以编程方式给出,则表示效果很好。

如何从编程方式的选项卡栏控制器导航到情节提要视图控制器。

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

 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.
   }


}
bufenglangzi 回答:如何在iOS siwft中以编程方式将情节提要ViewController加载到Tabbar控制器中?

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

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)
}
,

因此将以编程方式创建导航控制器,然后将FirstVC或XVC分配为该导航控制器的根。所有标签都重复了此操作。

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

  

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

enter image description here enter image description here

本文链接:https://www.f2er.com/3126034.html

大家都在问