如何使用swift以编程方式在UITabBarController中添加选项卡?

gel*_*zzz 29 tabs uitabbarcontroller uiviewcontroller swift

如何从UIViewController扩展的任何类中以编程方式创建选项卡:

class DashboardTabBarController: UITabBarController {

    override func viewDidLoad() {
        //here

    }
 ...

}
Run Code Online (Sandbox Code Playgroud)

mau*_*nde 57

更新SWIFT 3

如何以UITabBarController编程方式创建的一个示例可能是这样的:

首先,我们创建UIViewControllers将成为标签栏界面的每个选项卡的内容.对于这个例子,我们只创建一个非常简单的.

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

        view.backgroundColor = UIColor.green
        self.title = "item1"
        print("item 1 loaded")
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试过相同但不显示标签栏。除此之外还有什么我需要做的吗?`DashboardTabBarController` -> `viewWillAppear` 未调用。 (2认同)

kal*_*ada 11

如果您为视图控制器使用故事板,那么您必须在 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

        }

    }
}
Run Code Online (Sandbox Code Playgroud)