При нажатии на элемент tabBar всегда должен открываться первый контроллер представления - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть приложение с панелью навигации (5 кнопок). Можно ли всегда открывать первый контроллер навигации при нажатии на одну из 5 кнопок панели вкладок? Например, button1 открывает VC1 (с контроллером навигации), который может открыть VC2, который может открыть VC3 и т. Д. А если я нахожусь на VC3, то нажмите на другую кнопку панели вкладок (скажем, button2), затем снова нажмите на button1, Я хочу, чтобы он открыл VC1, а не VC3, где я его оставил.

Я пытался с этим, но по какой-то причине он не работает, как я ожидал:

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    self.navigationController?.popToRootViewController(animated: true)
    viewController.navigationController?.popToRootViewController(animated: true)
}

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

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

Тем не менее, если вы стремитесь достичь этого (подключиться к корню всего одним касанием), реализуйте tabBarController(_:didSelect:) как:

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
  navigationController?.popToRootViewController(animated: true)
}

должно быть достаточно, что означает, что ваш фрагмент кода должен работать! Тем не менее, проблема заключается в том, что метод не даже вызывается, поэтому убедитесь, что контроллер представления соответствует UITabBarControllerDelegate, и реализуйте:

tabBarController?.delegate = self

Добавление его в метод viewDidLoad() должно быть в порядке.

0 голосов
/ 05 сентября 2018

Для достижения этой функциональности, я пишу код в didSelect метод tabBarDelegate.

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
            let rootView = self.viewControllers![self.selectedIndex] as! UINavigationController
            rootView.popToRootViewController(animated: false)
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...