'DestinationViewController Segue and UINavigationController swift
So I have a prepareForSegue method like this:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "fromEventTableToAddEvent" {
let addEventViewController: AddEventViewController = segue.destinationViewController as! AddEventViewController
addEventViewController.newTagArray = newTagArray
}
}
However, at runtime the app crashes and logs spit out this message:
Could not cast value of type 'UINavigationController'
The error comes because the addEventController is embedded in a navigation controller, however I'm not sure how I would set up the segue so that the destinationViewController is set to the NavigationController, but also allow me to pass variables in the prepareForSegue method to the addEventController
So how would I do this using Swift?
I extremely appreciate your help and time you may offer in response. It helps alot
Solution 1:[1]
You only need to access the navigation controller's topViewController, which will be the AddEventViewController. Here is the code:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "fromEventTableToAddEvent" {
let nav = segue.destinationViewController as! UINavigationController
let addEventViewController = nav.topViewController as! AddEventViewController
addEventViewController.newTagArray = newTagArray
}
}
Solution 2:[2]
All that is needed explicitly is to create an object off the segue.destination class and downcast it to your desired ViewController.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Dan Levy |
Solution 2 | KingFloat |