Как я могу перейти или вернуться ко второй сцене первой вкладки в приложении с вкладками из сцены на другой вкладке?
У меня есть раскадровка с контроллером панели вкладок и тремя вкладками. Каждая вкладка имеет навигационный контроллер. На первой вкладке есть три сцены. В представлении на третьей вкладке есть кнопка (log out), которую я хотел бы перейти ко второй сцене на первой вкладке (соответствующей контроллеру log in view и подключенной к первой сцене через Show(например, Push)).
Вот что я попробовал:
self.tabBarController?.selectedIndex = 0
Это работает, поскольку я возвращаюсь к начальной сцене первой вкладки после нажав на UIButton. Но поскольку я хочу добраться до второй сцены, это не полное решение. Я думаю, что решение может быть следующим:
self.tabBarController?.selectedViewController = LoginViewController()
Или
self.tabBarController?.setViewControllers(self.LoginViewController, animated: true)
Но я не хочу создавать еще один экземпляр контроллера вида.
Могу ли я все еще использовать .selectedIndex для реализации решения?
3 ответа:
Простое решение, которое вы можете попробовать, это 1. Задайте имя глобальной переменной (например, в делегате приложения) как isLogoutClick типа boolean. 2. Пока вы находитесь на третьей вкладке и нажимаете на кнопку выхода, то сделайте глобальную переменную "isLogoutClick" как true. 3.а затем перейдите на первую вкладку (1-я сцена) и на viewDidLoad просто проверьте условие, что если (appDelegate.isLogoutClick) { переместите свой взгляд на следующую сцену. } 4. ложные ценности isLogoutClick. 5. убедитесь, что изначально значение isLogoutClick равно false.
Попробуйте это, возможно, это поможет вам.
После установки
selectedIndex
в0
, Выполните сегмент, который вы хотите (в этом примере,"loginSegue"
). Вы можете назвать свой сегмент в раскадровке, если еще не сделали этого.tabBarController?.selectedIndex = 0 if let someViewController = tabBarController?.viewControllers?[0] as? SomeViewController { someViewController.performSegueWithIdentifier("loginSegue", sender: nil) }
Я не уверен, что это работает для tabBarController, потому что я использовал это для моего navigationController, но должен работать так же.
if let tab = self.tabBarController?.viewControllers { if let index = find(tab.map { $0 is LoginViewController }, true) { let destination = tab[index] as LoginViewController tabBarController?.presentViewController(destination, animated: true, completion: nil) } }
С навигационным контроллером я бы использовал
popToViewController
, но я не уверен, как именно работает tabBarController