I have couple of questions.
How to pass the data (which i got after the Alamofire request is finished), to one of children of TabBarController?
The first problem i have is that i can't override the func prepareForSegue inside login action(when the button is tapped), it says i can override only class members. But if i put the func outside of IBAction then i won't send the data that i need.
And the second problem is, when i put the overrided function outside of IBAction, and the code look like this:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
let homeVC = segue.destinationViewController as HomeViewController
homeVC.templateForCell = templates
}
when i run it, i got the error:
Could not cast value of type 'UITabBarController' to
HomeViewController'
(HomeViewController is my destination view, where i should pass the data from Alamofire).
You don't necessarily need to use prepareForSegue for this. Just reference which ViewController in the TabBarController viewControllers array that you want and cast it.
let vc = self.tabBarController.viewControllers![1] as! HomeViewController
vc.templateForCell = templates
If the ViewControllers in your TabBar are embedded in Navigation Controllers, you can do this:
let navController = self.tabBarController.viewControllers![1] as! UINavigationController
let vc = navController.topViewController as! HomeViewController
vc.templateForCell = templates
For Xcode 8, Swift 3.x you can use something like the following. This assumes you have your view controller embedded in a navigation controller. In my situation, I am trying to set a variable called startWizard
to true when navigating from the new user setup view.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "segueFromNewUserToDashboard") {
let dashboardController = segue.destination as! MyTabBarController
for viewController in dashboardController.viewControllers! {
let navViewController = (viewController as! MyNavigationController).topViewController!
if (navViewController.isKind(of: DashboardViewController.self) == true) {
(navViewController as! DashboardViewController).startWizard = true
break
}
}
}
}