Представляя NavigationController с TabBarViewController, нельзя выбрать индекс программно - PullRequest
2 голосов
/ 05 июля 2019

Я пытаюсь представить NavigationController и выбрать вторую вкладку в блоке завершения. Мой код:

let chatViewController = UITabBarController()
let navigationController = UINavigationController(rootViewController: chatViewController)

present(navigationController, animated: true, completion: {
    self.visibleViewController = navigationController
    self.visibleViewController?.tabBarController?.selectedIndex = 1
})

Вторая попытка:

let chatViewController = UITabBarController()
let navigationController = UINavigationController(rootViewController: chatViewController)
navigationController.tabBarController?.selectedIndex = 1

present(navigationController, animated: true, completion: {
    self.visibleViewController = navigationController
})

В обоих случаях tabBarController равен нулю. Как перейти на другую вкладку?

Ответы [ 3 ]

3 голосов
/ 05 июля 2019

Вы пытаетесь получить доступ к UITabBarController из UINavigationController, но вам нужно получить доступ к самому первому контроллеру из UINavigationController, и оттуда вам нужно выбрать UITabBar следующим образом:

func showTabBarControllerr() {
    let chatViewController = UITabBarController()
    //Note: Make sure you have already added the Controllers in Tabbarcontroller
    chatViewController.viewControllers = [DemoOne(), DemoTwo()]
    let navigationController = UINavigationController(rootViewController: chatViewController)
    present(navigationController, animated: true, completion: {
        if let tabBarController = navigationController.viewControllers.first as? UITabBarController {
            tabBarController.selectedIndex = 1
        }
    })
}

Дайте мне знать, помогает это или нет!

1 голос
/ 05 июля 2019

Вместо звонка

present(navigationController, animated: true, completion: { })

в viewDidLoad, попробуйте позвонить в viewWillAppear или viewDidAppear

0 голосов
/ 05 июля 2019

Попробуйте это (Swift 5):

  1. Установите идентификатор для вашего UITabBarController в раскадровке, что-то вроде MainTabBar

  2. Для функции или IBAction используйте этот код:

    let tbc = storyboard? .InstantiateViewController (withIdentifier: "MainTabBar") как! UITabBarController

    tbc.selectedIndex = 1 // Это индекс вашего контроллера

    настоящее время (tbc, анимация: ложь, завершение: ноль)

...