Как обновить нижнюю TabBar, не занимаясь навигацией в Swift? - PullRequest
0 голосов
/ 14 января 2020

У меня есть приложение с HomeView и нижней TabBar, которое загружает другие виды при нажатии. На этой панели TabBar у меня также есть кнопка «Дополнительно», которая при нажатии открывает список, каждая ячейка этого представления также открывает другие виды. (Когда я говорю о представлениях, я имею в виду новые туннели / контроллеры навигации, например: MyPicturesViewController, SettingsViewController et c ...). Есть моя проблема, я должен реализовать функцию, которая из моего HomeView по нажатию кнопки переходит к определенному c представлению, которое находится не в TabBar, но в списке Больше, а также обновляет TabBar чтобы выделить кнопку «Дополнительно».

Сначала я попытался выполнить навигацию вручную с помощью этого кода:

let viewController = UIStoryboard.instantiate(NewViewController.self)
self.viewController?.navigationController?.pushViewController(viewController, animated: true)

, он работает довольно хорошо, а затем вручную обновил панель вкладок

self.viewController?.tabBarController?.selectedIndex = 4

Но обновление TabBar перенаправляет автоматически к выбранному индексу, который является представлением списка Больше, и даже не учитывает ручную навигацию, которую я делал в предыдущем коде. Поэтому мой вопрос заключается в том, можно ли обновить TabBar bar без загрузки собственной navigationcontroller?. Если нет, как мне добиться того, что я хочу сделать, я попробовал много вещей, таких как создание navigationcontroller и его viewcontrollers и замена стеки вкладок viewcontrollers, но у меня ничего не получилось.

Заранее благодарю тех, кто уделит мне время!

1 Ответ

0 голосов
/ 14 января 2020

Вместо этого делайте это до

self.viewController?.tabBarController?.selectedIndex = 4 

Pu sh ваш контроллер в методе делегата tabBar

  func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        if viewController == desiredNavigationController {
            show(desiredNavigationController, animated: true) // push
            return false
        }
        return true
    }
...