如何将ViewController添加到UITabBarController并以编程方式加载它?

时间:2018-01-26 02:58:03

标签: swift uitabbarcontroller viewcontroller

我试图将自定义viewController放入UITabBarController,然后呈现它。但当我尝试下面的所有内容时,我得到的是一个空白屏幕,底部有一个空白的标签栏。

@IBAction func didOpenTabs(_ sender: Any) {
    let tabBarController = UITabBarController()

    let vc = ViewController()

    let controllers = [vc]

    tabBarController.viewControllers = controllers

    self.present(tabBarController, animated: true, completion: nil)

}

我需要访问视图控制器,因为视图控制器需要从变量加载数据,并在关闭时将数据保存到同一个变量。

我觉得我在基础层面上做错了什么但是我不熟悉swift以确定它是什么。

1 个答案:

答案 0 :(得分:0)

问题是,在调用viewControllers之前无法分配viewDidLoad,因为内部UITabBar尚未初始化,因此要解决问题,您可以将其子类化UITabBarController要确保您在正确的位置(viewControllers)设置了viewDidLoad,最终您的代码可能是:

import UIKit

class MyTabBarController:UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let vc1 = UIViewController()
        vc1.view.backgroundColor = UIColor.green
        vc1.tabBarItem = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 0)

        let vc2 = UIViewController()
        vc2.view.backgroundColor = UIColor.red
        vc2.tabBarItem = UITabBarItem(tabBarSystemItem: .history, tag: 1)

        viewControllers = [vc1, vc2]
    }
}

class ViewController: UIViewController {
    @IBAction func showTabVc() {
        self.present(MyTabBarController(), animated: true, completion: nil)
    }
}