Передача данных из ViewController> TabBarController> NavigationController> ViewController - PullRequest
0 голосов
/ 24 мая 2019

У меня есть экран входа в систему, который переходит к панели вкладок, которая затем переходит к контроллеру навигации.Мне нужно передать имя пользователя на первый контроллер представления навигационного контроллера.Итак:

Экран входа в систему -> TabBarController -> NavigationController -> CustomerMainViewController

Я переполнен стеком и реализовал следующий код, который, по-видимому, является консенсусом:

//From my login View Controller
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let tabVC = segue.destination as! UITabBarController
    let navVC = tabVC.viewControllers!.first as! UINavigationController
    let destVC = navVC.viewControllers.first as! CustomerMainViewController
    destVC.tempName = self.emailTextField.text!
}

@IBAction func loginButtonPresssed(_ sender: Any) {

    self.performSegue(withIdentifier: "GoToTabBar", sender: self)
}
//From my View Controller (CustomerMainView Controller)
override func viewDidLoad() {
    super.viewDidLoad()
    username.text = self.tempName
}

Я ожидаю, что поле имени пользователя на моем контроллере представления будет заполнено, но оно пустое.

1 Ответ

0 голосов
/ 24 мая 2019

Ваш код должен работать. Когда вы определили несколько segue, это может помочь проверить идентификатор segue и / или безопасно развернуть контроллеры представления:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "GoToTabBar" {
        if let tabVC = segue.destination as? UITabBarController, 
            let navVC = tabVC.viewControllers?.first as? UINavigationController,
            let destVC = navVC.viewControllers.first as? CustomerMainViewController {
          destVC.tempName = self.emailTextField.text!
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...