Ios 通过Tabbar控制器传递信息

Ios 通过Tabbar控制器传递信息,ios,swift,uitabbarcontroller,Ios,Swift,Uitabbarcontroller,拥有一个表视图控制器,该控制器将ID字段传递到视图控制器上,以便检索详细信息,但两个控制器之间是一个选项卡栏控制器。我不确定如何在两人之间传递信息。试图使用Segue,但该值在到达细节控制器后为空 EventBarTableViewCell.swift override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "showEventDetail"

拥有一个表视图控制器,该控制器将ID字段传递到视图控制器上,以便检索详细信息,但两个控制器之间是一个选项卡栏控制器。我不确定如何在两人之间传递信息。试图使用Segue,但该值在到达细节控制器后为空

EventBarTableViewCell.swift

override func prepare(for segue: UIStoryboardSegue, sender: Any?)            {
    if segue.identifier == "showEventDetail" {
        if let IndexPath = self.tableView.indexPathForSelectedRow {
            let controller = segue.destination as? eventDetailViewController

            controller?.inTradeShowID = (events?[IndexPath.row].tradeshowID!)!
            controller?.viaSegue = (events?[IndexPath.row].tradeshowID!)!
            //controller?.performSegue(withIdentifier: "tradeShowID", sender: self)
            //if shouldShowSearchResults {
            //    controller?.viaSegue = filteredArray[IndexPath.row].charterNum!
            //} else {
            //    controller?.viaSegue = repositories[IndexPath.row].charterNum!
            //}
        }
    }
}
eventDetailViewController.swift

var viaSegue = ""
var inTradeShowID = ""

 override func viewDidLoad() {
    super.viewDidLoad()

    inTradeShowID = self.viaSegue
}
我需要一些帮助


您正在切换到选项卡栏控制器,而不是“显示”视图,因此您需要“向下钻取”也就是说:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "showEventDetail" {

        if let IndexPath = self.tableView.indexPathForSelectedRow {

            // we're segueing to a Tab Bar Controller
            if let tabBarVC = segue.destination as? UITabBarController {

                // get the first view controller of the Tab Bar Controller
                // *that* is where you want to "pass" your data
                if let controller = tabBarVC.viewControllers?.first as? eventDetailViewController {

                    // either should work
                    controller.inTradeShowID = (events?[IndexPath.row].tradeshowID!)!
                    controller.viaSegue = (events?[IndexPath.row].tradeshowID!)!

                }  //end if let controller = tabBarVC.viewControllers?.first as? eventDetailViewController

            }  //end if let tabBarVC = segue.destination as? UITabBarController

        }  //end if let IndexPath = self.tableView.indexPathForSelectedRow

    }  //end if segue.identifier == "showEventDetail"
}

您正在切换到选项卡栏控制器,而不是“显示”视图,因此您需要“向下钻取”:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "showEventDetail" {

        if let IndexPath = self.tableView.indexPathForSelectedRow {

            // we're segueing to a Tab Bar Controller
            if let tabBarVC = segue.destination as? UITabBarController {

                // get the first view controller of the Tab Bar Controller
                // *that* is where you want to "pass" your data
                if let controller = tabBarVC.viewControllers?.first as? eventDetailViewController {

                    // either should work
                    controller.inTradeShowID = (events?[IndexPath.row].tradeshowID!)!
                    controller.viaSegue = (events?[IndexPath.row].tradeshowID!)!

                }  //end if let controller = tabBarVC.viewControllers?.first as? eventDetailViewController

            }  //end if let tabBarVC = segue.destination as? UITabBarController

        }  //end if let IndexPath = self.tableView.indexPathForSelectedRow

    }  //end if segue.identifier == "showEventDetail"
}