AETechAdm
AETechAdm

Reputation: 57

Pass Information through TabBarController Swift

Have a Table View Controller that will pass an ID field onto a View Controller in order to retrieve detail however in between the two controllers is a Tab Bar Controller. I am unsure how I am to get the information passed between the two. Was attempting to use a Segue but the value is blank once it gets to the detail controller.

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
}

Could use some help.

Screen Shoot of Controllers

Upvotes: 0

Views: 50

Answers (1)

DonMag
DonMag

Reputation: 77690

You are segueing to a Tab Bar Controller, not to your "display" view, so you need to "drill down" so to speak:

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

Upvotes: 2

Related Questions