以编程方式创建UITabBarController,仅显示一个选项卡

时间:2018-11-28 20:45:10

标签: ios swift uitabbarcontroller programmatically-created coordinator-pattern

我有一个TabBarCoordinator,其中包含一个UITabBarController。

我想添加两个UINavigationController(CoinPage和Top / Flop),但是选项卡中仅显示一个。我以为我已经以正确的方式设置了所有内容,并尝试了其他一些方法,但是我无法使其正常工作。

enter image description here

这是我的代码:

class TabBarCoordinator: Coordinator {
    var dependencys: DependencyManager


    let tabBarController: UITabBarController
    var tabCoordinators = [Tabs: Coordinator]()
    var navigationController: UINavigationController

    init(navigationController: UINavigationController, persistenceCentral: PersistenceCentral, dependencys: DependencyManager) {
        self.tabBarController = UITabBarController()
        self.navigationController = navigationController
        self.dependencys = dependencys
        var controllers: [UIViewController] = []

        tabCoordinators[.topFlop] = TopFlopCoordinator(navigationController: navigationController, dependencys: dependencys)

        tabCoordinators[.coinPage] = CoinPageCoordinator(dependencys: dependencys, navigationController: navigationController)

        let coinPageVC = tabCoordinators[.coinPage]!.navigationController
        coinPageVC.tabBarItem = UITabBarItem(title: "Coinpage", image: nil, tag: 0)


        let topFlopVC = tabCoordinators[.topFlop]!.navigationController
        topFlopVC.tabBarItem = UITabBarItem(title: "Top/Flop", image: nil, tag: 1)


        controllers.append(topFlopVC)
        controllers.append(coinPageVC)

        tabBarController.viewControllers = controllers
        tabBarController.tabBar.isTranslucent = false

        tabCoordinators[.topFlop]?.start()
        tabCoordinators[.coinPage]?.start()
    }

    func start() {

    }
}

我做了一些研究,例如,他以类似的方式设置选项卡: https://medium.com/@satindersingh71/uitabbarcontroller-programmatically-2a3df63607f1

所以我不明白为什么它不起作用。

1 个答案:

答案 0 :(得分:0)

这两行返回相同的对象

 let coinPageVC = tabCoordinators[.coinPage]!.navigationController
 let topFlopVC = tabCoordinators[.topFlop]!.navigationController

因此第一个的最后一个覆盖设置显示为寂寞,您必须确保创建两个单独的导航对象