0

我正在以UITabbarController编程方式创建一个及其所有选项卡的内容,如下所示:

private func createTabBarController()
{
    /* Only create tabBarController once! */
    if (RootRouter._tabBarController == nil)
    {
        let firstPageViewController = FirstPageViewController(nibName: "FirstPageViewController", bundle: nil)
        let secondPageViewController = SecondPageViewController(nibName: "SecondPageViewController", bundle: nil)
        let thirdPageViewController = ThirdPageViewController(nibName: "ThirdPageViewController", bundle: nil)
        let thirdPageNavigationController = ThirdPageNavigationController(rootViewController: thirdPageViewController)
        let fourthPageViewController = FourthPageViewController(nibName: "FourthPageViewController", bundle: nil)

        thirdPageViewController.loadViewIfNeeded()

        RootRouter._tabBarController = UITabBarController()
        RootRouter._tabBarController?.viewControllers =
        [
            firstPageViewController,
            secondPageViewController,
            thirdPageNavigationController,
            fourthPageViewController
        ]

        /* This shouldn't be necessary! */
        let tabCount = RootRouter._tabBarController!.viewControllers?.count ?? 0
        for i in 0 ..< tabCount
        {
            RootRouter._tabBarController?.selectedIndex = i
        }
    }
}

如果我注释掉此方法中的最后一部分,则应用程序启动时选项卡将无法正确初始化:仅显示前三个选项卡按钮,并且没有突出显示它们。

如果启用了最后一个代码部分,它将工作并且看起来正确但是该方法似乎是一种黑客攻击,我认为以后可能会导致副作用。我是否缺少正确初始化所有选项卡(和选项卡按钮)的任何内容?

4

1 回答 1

1

选定索引

此属性名义上表示 viewControllers 属性数组的索引。但是,如果所选视图控制器当前是更多导航控制器,则此属性包含值NSNotFound

您必须选择任何索引一次。

而不是这样做

 let tabCount = RootRouter._tabBarController!.viewControllers?.count ?? 0
 for i in 0 ..< tabCount
    {
            RootRouter._tabBarController?.selectedIndex = i
    }

这样做:

 RootRouter._tabBarController?.selectedIndex = 0 // Any other index

您的方法没有错,但是RootRouter._tabBarController?.selectedIndex不需要的迭代调用。

于 2019-05-13T04:16:27.807 回答