web-dev-qa-db-fra.com

Comment ajouter des onglets par programme dans UITabBarController avec swift?

Comment créer par programmation des onglets à partir de toute classe étendue par UIViewController:

class DashboardTabBarController: UITabBarController {

    override func viewDidLoad() {
        //here

    }
 ...

}
21
gellezzz

MISE À JOUR Swift 3

Voici un exemple de la façon de créer une UITabBarController par programme:

Tout d'abord, nous créons la UIViewControllers qui sera le contenu de chaque onglet de l'interface de la barre d'onglets. Pour cet exemple, nous n'en créons qu'un très simple.

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

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

Maintenant, la UITabBarController:

Nous créons les nouvelles instances de la UIViewControllers que nous voulons afficher dans la barre d'onglets. Ensuite, nous créons une icône pour chaque instance créée, puis un tableau contenant toutes les variables UIViewControllers spécifiant le contenu de chaque onglet de l'interface de la barre d'onglets. L'ordre des contrôleurs de vue dans le tableau correspond à l'ordre d'affichage dans la barre d'onglets .

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;
    }
}
47
mauricioconde

Si vous utilisez le storyboard pour les contrôleurs de vue, vous devez écrire comme ceci dans votre classe 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

        }

    }
}
0
kalyani puvvada