首页 > 解决方案 > 通过 Segue 将数据传递到另一个 Storyboard 中的 UITabBarController 推送到导航堆栈

问题描述

我正在尝试将一些数据推送到ViewController另一个 Storyboard 中,但我无法正确获取顺序。

我有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 letbarViewControllers 和导航控制器,试图获得正确的视图控制器,但我似乎无法让它工作。

这是主要故事板的屏幕截图UITableView

在此处输入图像描述

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;
    }
}

及其匹配的故事板

在此处输入图像描述

标签: iosswiftswift4

解决方案


其实,它并没有我想的那么复杂。转场目的地是 DetailsTabViewController。只需转换为那个而不是 UITabBarController (因为我的自定义类已经是 type UITabBarController)。

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

    }
}

推荐阅读