Передайте данные через Segue в UITabBarController в другой раскадровке, помещенной в стек навигации - PullRequest
0 голосов
/ 09 октября 2018

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

У меня есть UITableView, в котором есть список элементов при выбореЯ хочу передать ключ к ViewController, который находится на другой раскадровке, встроенной в UITabBarContoller, который был помещен в стек навигации.

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

мой код представления таблицы в моей главной раскадровке

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "segue_details", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    print("Pepare for segue: \(String(describing: segue.identifier))")

    if let barViewControllers = segue.destination as? UITabBarController ,
        let nav = barViewControllers.viewControllers?[0] as? UINavigationController,
        let destinationVC = nav.topViewController as? DetailsTabViewController {
        let vehicle = tableData[tableView.indexPathForSelectedRow!.row] as! JSON
        //THIS NEVER FIRES
        print("\n\n\n\n\n\nPrepare call key: \(vehicle["CallKey"])\n\n\n\n\n")
        destinationVC.callKey =  vehicle["CallKey"].stringValue
    }
}

Я переключил if let barViewControllers *1016*и навигационные контроллеры пытаются получить правильный контроллер View, но я не могу заставить его работать.

Вот скриншот главного раскадровки UITableView

enter image description here

DetailsTabViewController код

class DetailsTabViewController: UITabBarController {
    public var callKey : String = ""

    override func viewDidLoad() {
        super.viewDidLoad()
        print("\n\n\n\n\n Details for callKey: \(callKey) \n\n\n\n\n")
        title = callKey;
    }
}

и соответствующий ему раскадровка

enter image description here

1 Ответ

0 голосов
/ 09 октября 2018

На самом деле, это не так сложно, как я думал.Назначением segue является DetailsTabViewController.Просто приведите его вместо UITabBarController (поскольку мой пользовательский класс уже имеет тип UITabBarController).

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let barViewControllers = segue.destination as? DetailsTabViewController {
               //Do your data pass / setup here

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...