UITabBarController неправильно инициализирует контроллеры представления вкладок - PullRequest
0 голосов
/ 13 мая 2019

Я создаю 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
        }
    }
}

Если я закомментирую последнюю часть этого метода, вкладки не будут правильно инициализированызапуск приложения: отображаются только первые три кнопки вкладок, и ни одна из них не выделена.

Если последняя часть кода включена, она будет работать и выглядеть правильно, однако такой подход выглядит как взлом, и я думаю, что он может привести кпобочные эффекты позже.Что-то мне не хватает, чтобы правильно инициализировать все вкладки (и кнопки вкладок)?

1 Ответ

1 голос
/ 13 мая 2019

SelectedIndex

Это свойство номинально представляет индекс в массиве свойство viewControllers. Однако, если выбранный контроллер представления в настоящее время контроллер навигации More, это свойство содержит значение 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 не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...