Как я могу перейти или вернуться ко второй сцене первой вкладки в приложении с вкладками из сцены на другой вкладке?


У меня есть раскадровка с контроллером панели вкладок и тремя вкладками. Каждая вкладка имеет навигационный контроллер. На первой вкладке есть три сцены. В представлении на третьей вкладке есть кнопка (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 2

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