Une de mes séquences passe d'un contrôleur de vue à un contrôleur de table. Je souhaite passer un tableau entre les deux, mais avec un contrôleur de navigation avant le contrôleur tableview, je ne vois pas comment passer du tableau. Comment passez-vous les données via un contrôleur de navigation à un contrôleur tableview?
Remplacez prepareForSegue
et définissez la valeur de la vue de table souhaitée. Vous pouvez récupérer la vue de table à partir de la propriété UINavigation
viewControllers
.
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!){
let navVC = segue.destinationViewController as UINavigationController
let tableVC = navVC.viewControllers.first as YourTableViewControllerClass
tableVC.yourTableViewArray = localArrayValue
}
Pour Swift 3:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let navVC = segue.destination as? UINavigationController
let tableVC = navVC?.viewControllers.first as! YourTableViewControllerClass
tableVC.yourTableViewArray = localArrayValue
}
La réponse de @Tommy Devoy est correcte mais voici la même chose dans Swift 3
Mise à jour Swift
// MARK: - Navigation
//In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
if segue.identifier == "yourSegueIdentifier" {
if let navController = segue.destination as? UINavigationController {
if let chidVC = navController.topViewController as? YourViewController {
//TODO: access here chid VC like childVC.yourTableViewArray = localArrayValue
}
}
}
}
J'obtenais ceci erreur à la solution de Horatio.
ERROR: Value of type 'UINavigationController' has no member 'yourTableViewArray'
Cela pourrait donc aider d'autres personnes comme moi à la recherche d'une solution code
seulement. Je voulais rediriger vers un contrôleur de navigation, mais transmettre des données au contrôleur de vue racine dans ce contrôleur de navigation.
if let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "yourNavigationControllerID") as? UINavigationController,
let yourViewController = controller.viewControllers.first as? YourViewController {
yourViewController.yourVariableName = "value"
self.window?.rootViewController = controller // if presented from AppDelegate
// present(controller, animated: true, completion: nil) // if presented from ViewController
}
La solution de Tommy nécessite que vous configuriez la Segue dans Storyboard.
Voici une solution uniquement en code:
func functionToPassAsAction() {
var controller: UINavigationController
controller = self.storyboard?.instantiateViewControllerWithIdentifier("NavigationVCIdentifierFromStoryboard") as! UINavigationController
controller.yourTableViewArray = localArrayValue
self.presentViewController(controller, animated: true, completion: nil)
}
Swift 3 (solution testée) - Transmission de données entre VC - Segue avec NavigationController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let navigationContoller = segue.destination as! UINavigationController
let receiverViewController = navigationContoller?.topViewController as ReceiverViewController
receiverViewController.reveivedObject = sentObject
}
syntaxe FIXED pour Swift
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let navVC = segue.destination as! UINavigationController
let tableVC = navVC.viewControllers.first as! YourTableViewControllerClass
tableVC.yourTableViewArray = localArrayValue
}