如何为UITabBarController中包含两次的相同故事板引用设置不同的UITabBarItem?

时间:2018-03-13 22:35:06

标签: ios swift uitabbarcontroller uistoryboard uitabbaritem

我有一个包含四个视图控制器的UITabBarController。前两个是对相同外部故事板的故事板引用:" BookTable"在下图中。

tab bar controller with two child VCs

我想为这两个项目设置不同的标签栏图标,但我无法弄清楚如何。如果我没有在嵌入式故事板中设置标签栏项属性,那么正在运行的应用程序中会出现 no 标签栏,即使我已在控制器中配置了标签栏。请参阅下面的故事板和模拟器:

tab bar controller with specified item simulator screenshot with missing items

如果我在嵌入式故事板中设置标签栏项目属性,则两者的标签栏项目相同:

tab bar controller with duplicate items

如果我在代码中设置标签栏项属性,则不会发生任何变化:

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        tabBar.items![0].title = "Test Item 1"
        tabBar.items![1].title = "Test Item 1"
    }

}

我有办法做到这一点,还是我必须复制我的故事板才能设置不同的标签栏项目?

1 个答案:

答案 0 :(得分:3)

不幸的是,在查看控制器重新使用标签栏控制器时,Interface Builder没有提供太多可能性。您必须以编程方式指定UITabBarController的视图控制器:

class TabBarController: UITabBarController {
    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

        setUp()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        setUp()
    }

    func setUp() {
        let storyboard = UIStoryboard(name: [storyboard id], bundle: nil)

        let firstBookTableVc = storyboard.instantiateViewController(withIdentifier: "BookTable")
        let secondBookTableVc = storyboard.instantiateViewController(withIdentifier: "BookTable")

        //configure the view controllers here...

        viewControllers = [firstBookTableVc, secondBookTableVc]

        tabBar.items?[0].image = [first tab bar image]
        tabBar.items?[1].image = [second tab bar image]

        tabBar.items?[0].title = "first title"
        tabBar.items?[1].title = "second title"
    }
}