Выбранный индекс на панели вкладок не работает в Swift - PullRequest
0 голосов
/ 05 июня 2019

Я хочу изменить выбранный по умолчанию контроллер вида на Tab Bar.Я пробовал другие решения, которые видел в других потоках, например, изменив его в AppDelegate или в ViewDidAppear следующим образом:

class MainTabBarController: UITabBarController {

  override func viewDidLoad() {
     super.viewDidLoad()

       setupTabBar()
    }

      /// this is the attempt to set the selected index that doesn't work 
  override func viewDidAppear(_ animated: Bool) {

     self.tabBarController?.selectedIndex = 2

    }

  func setupTabBar(){

    let vc1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "mainvc")
    let vc2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "secondvc")
    let vc3 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "thirdvc")
    let FirstController = UINavigationController(rootViewController: vc1)
    let SecondController = UINavigationController(rootViewController: vc2)
    let ThirdController = UINavigationController(rootViewController: vc3)

    viewControllers = [FirstController, SecondController, ThirdController]

    }
}

Пока ничего не получалось, и он всегда показывает выбранный индекс = 0.

Я установил контроллер представления панели вкладок в качестве начального контроллера просмотра в Main storyboard.Должен ли я делать это в AppDelegate вместо этого?

1 Ответ

2 голосов
/ 05 июня 2019

Вы говорите, что

class MainTabBarController: UITabBarController {

, поэтому self относится к UITabBarController, но вы устанавливаете выбранный индекс tabBarController из self:

self.tabBarController?.selectedIndex = 2

В self нет встроенных контроллеров панели вкладок.self сам является контроллером панели вкладок!Вы можете просто установить self.selectedIndex:

self.selectedIndex = 2

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

...