【问题标题】:Creating UITabBarController programmatically, only one Tab is showing up以编程方式创建 UITabBarController,只显示一个选项卡
【发布时间】:2019-04-30 20:30:59
【问题描述】:

我有一个 TabBarCoordinator,它包含一个 UITabBarController。

我想添加两个 UINavigationController(CoinPage 和 Top/Flop),但只有一个显示在选项卡中。我以为我已经以正确的方式设置了一切,我尝试了其他一些东西,但我无法让它工作。

这是我的代码:

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

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

【问题讨论】:

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


    【解决方案1】:

    这两行返回相同的对象

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

    所以第一个的最后一个覆盖设置显示孤独,你必须确保你创建了 2 个单独的导航对象

    【讨论】:

    • 这是一本字典,你确定吗?因为当我设置断点并检查值时,“var 控制器”中有两个视图控制器
    • 您是否为tabCoordinators 中的每个键创建一个新的navigationController 实例?如果是则显示相关代码
    • 好的,我明白了,你是对的。谢谢!这是因为我将同一个 UINavigationController 传递给不同的协调器。谢谢!
    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多