Я пытаюсь сделать вот что: введите описание изображения здесь

Я хочу передать некоторые данные в Applications ViewController, который встроен в панель навигации, поэтому я получаю сообщение об ошибке: не удалось передать значение типа 'UINavigationController'

Я не могу понять, как реализовать то же самое. Помощь очень ценится. Спасибо.

0
Enrik Qaz 24 Окт 2018 в 08:52

2 ответа

Лучший ответ

Причина в том, что вы не можете передавать данные напрямую в ApplicationViewController, поскольку адресатом перехода InboxViewController является UINavigationController.

Итак, сначала вам нужно получить доступ к UINavigationController, а затем к ApplicationsViewController из стека.

Попробуйте код ниже:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "goToApplications" {
        if let navigation = segue.destination as? UINavigationController, let applicationVC = navigation.topViewController as? ApplicationsViewController {
            applicationVC.id = "RGB"
        }
    }
}
3
Sateesh Yemireddi 24 Окт 2018 в 06:07

Когда передается контроллер представления данных приложения, который является rootviewController из UINavigationController. вы должны указать имя перехода для контроллера навигации и ввести приведение как UINavigationController в качестве конечного контроллера просмотра. Получите rootviewController, который является контроллером представления приложения, и назначьте значение идентификатора

Вот код, как присвоить значение Application ViewController

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
        if segue.identifier == "navigationSegue" {  // segue of navigationVC
            let navVc = segue.destination as! UINavigationController
            let appVc = navVc.viewControllers.first as! ApplicationsViewController
            appvc.id = "RGB"
        }
    }
0
Jatin Kathrotiya 24 Окт 2018 в 06:06
52961858