Нажмите ViewController в UITabBarController - PullRequest
1 голос
/ 30 мая 2019

У меня общий вопрос: я настроил TabBar в своем приложении. Когда я нажимаю на элемент 1, на вкладке отображается ViewController (VC 1), встроенный в NavigationController. Этот VC должен выдвигать другой VC (VC 2), когда пользователь выходит из системы (используя firebase и addStateDidChangeListener). Это прекрасно работает: когда я выхожу из VC1, нажмите VC 2. Однако, когда я снова нажимаю на элемент 1 на панели вкладок. Угадай, что? Я вижу VC 1, пока нет пользователя. Я думаю, что я должен отклонить VC 1 как-то, но я не знаю, как реализовать эту функцию. Вы можете мне помочь?

Ответы [ 2 ]

3 голосов
/ 30 мая 2019

Изменение контроллеров представления в контроллере навигации

При нажатии кнопки выхода из системы удалите VC1 из контроллера навигации и добавьте VC2

if var viewControllers = self.navigationController?.viewControllers {
    viewControllers.removeLast()
    viewControllers.append(VC2())
    self.navigationController?.setViewControllers(viewControllers, animated: true)
}

При повторном входе в VC2 снова измените представлениеконтроллеры

self.navigationController?.setViewControllers([VC1()], animated: true)

Изменение вида контроллеров в панели вкладок контроллера

Выход из системы

if var viewControllers = self.tabBarController?.viewControllers {
    let newVC = UINavigationController(rootViewController: VC2())
    newVC.tabBarItem = UITabBarItem(title: "Log In", image: nil, tag: 0)
    viewControllers.removeFirst()
    viewControllers.insert(newVC, at: 0)
    self.tabBarController?.viewControllers = viewControllers
}

Вход в систему

if var viewControllers = self.tabBarController?.viewControllers {
    let newVC = UINavigationController(rootViewController: VC1())
    newVC.tabBarItem = UITabBarItem(title: "Home", image: nil, tag: 0)
    viewControllers.removeFirst()
    viewControllers.insert(newVC, at: 0)
    self.tabBarController?.viewControllers = viewControllers
}
0 голосов
/ 30 мая 2019

Вы можете переопределить окно rootviewcontroller новым контроллером панели вкладок.Так что в будущем у вас не будет ошибок с новой разработкой (новая иерархия экрана).

    //Login
    let navigation = UINavigationController.init(rootViewController: vc1)
    let tabVC = UITabBarController()
    tabVC.viewControllers?.append(navigation)
    self.appDelegate?.window?.rootViewController = navigation

    //Logout
    let navigation = UINavigationController.init(rootViewController: vc2)
    let tabVC = UITabBarController()
    tabVC.viewControllers?.append(navigation)
    self.appDelegate?.window?.rootViewController = navigation
...