Как программно добавлять вкладки в UITabBarController со скоростью?

Как создать программные вкладки из любого класса, расширенного UIViewController:

class DashboardTabBarController: UITabBarController {

    override func viewDidLoad() {
        //here

    }
 ...

}

Ответы

Ответ 1

ОБНОВЛЕНИЕ SWIFT 5

Один пример того, как программно создать UITabBarController может быть таким:

Сначала мы создаем UIViewControllers которые будут содержимым для каждой вкладки интерфейса панели вкладок. Для этого примера мы создаем только один очень простой.

class Item1ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = UIColor.green
        self.title = "item1"
        print("item 1 loaded")
    }
}

Теперь UITabBarController:

Мы создаем новые экземпляры UIViewControllers которые мы хотим отобразить на панели вкладок. Затем мы создаем значок для каждого созданного нами экземпляра, а затем создаем массив, который содержит все UIViewControllers которые определяют содержимое для каждой вкладки интерфейса панели вкладок. Порядок контроллеров представления в массиве соответствует порядку отображения на панели вкладок.

class DashboardTabBarController: UITabBarController, UITabBarControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let item1 = Item1ViewController()
        let icon1 = UITabBarItem(title: "Title", image: UIImage(named: "someImage.png"), selectedImage: UIImage(named: "otherImage.png"))
        item1.tabBarItem = icon1
        let controllers = [item1]  //array of the root view controllers displayed by the tab bar interface
        self.viewControllers = controllers
    }

    //Delegate methods
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        print("Should select viewController: \(viewController.title ?? "") ?")
        return true;
    }
}

Ответ 2

Если вы используете раскадровку для контроллеров представления, то вы должны написать так в своем классе tabbarcontroller.

class CustomTabbarController : UITabBarController {

    override func viewDidLoad() {

        super.viewDidLoad()

        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        let firstViewController = FirstViewController()
        let navigationController = UINavigationController(rootViewController: firstViewController)
        navigationController.title = "First"
        navigationController.tabBarItem.image = UIImage.init(named: "map-icon-1")

       viewControllers = [navigationController]

        if let secondViewController = storyboard.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController {

            let navgitaionController1 = UINavigationController(rootViewController: secondViewController)
            navgitaionController1.title = "Second"
            navgitaionController1.tabBarItem.image = UIImage.init(named: "second-icon-1")
            var array = self.viewControllers
            array?.append(navgitaionController1)
            self.viewControllers = array

        }

    }
}