TabbarController дочерний контроллер всегда возвращает ноль - Swift 4 - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь получить доступ к объектам из дочернего контроллера, но он всегда возвращает ноль. Пожалуйста, проверьте код ниже.

let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let vc: UITabBarController = mainStoryboard.instantiateViewController(withIdentifier: "TabBarController") as! UITabBarController
vc.selectedIndex = 2
let vc1 = vc.viewControllers?[2] as? FormViewController //this line returns nil
vc1?.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))
vc1?.formViewDelegate = self
self.present(vc, animated: true, completion: nil)

Пожалуйста, пролите немного света.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Судя по вашим комментариям, третья вкладка на самом деле является UINavigationController, в которой FormViewController имеет rootViewController.

Обновите ваш код как:

if let nc = vc.viewControllers?[2] as? UINavigationController, let vc1 = nc.topViewController as? FormViewController {
    vc1.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))
    vc1.formViewDelegate = self
}
0 голосов
/ 10 сентября 2018

Вы можете попробовать

let nav = vc.viewControllers?[2] as? UINavigationController
let vc1 = nav?.topViewController as? FormViewController

примечание: вы не должны получать доступ к любому элементу пользовательского интерфейса здесь

vc1?.fillUserData(dataDic: convertJsonStringToDictionary(jsonString: decodedURL))

как бы вылетело приложение

...