ios - perform - segue swift 4
Swift pass data a través del controlador de navegación (6)
Estaba obteniendo este error de la solución de Horatio.
ERROR: Value of type ''UINavigationController'' has no member ''yourTableViewArray''
Así que esto podría ayudar a otros como yo a buscar una solución de solo code
. Quería redireccionar a un controlador de navegación, pero pasar los datos al controlador de vista raíz dentro de ese controlador de navegación.
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
}
Una de mis transiciones pasa de un controlador de vista a un controlador de tabla de vista. Quiero pasar una matriz entre los dos, pero con un controlador de navegación antes del controlador de tabla de vista, no puedo imaginar cómo pasar la matriz. ¿Cómo se pasan datos a través de un controlador de navegación a un controlador de tabla de visión?
La respuesta de @Tommy Devoy es correcta, pero aquí está lo mismo en swift 3
Swift 3 actualizado
// 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
}
}
}
}
La solución de Tommy requiere que configure Segue en Storyboard.
Aquí hay una solución de solo código:
func functionToPassAsAction() {
var controller: UINavigationController
controller = self.storyboard?.instantiateViewControllerWithIdentifier("NavigationVCIdentifierFromStoryboard") as! UINavigationController
controller.yourTableViewArray = localArrayValue
self.presentViewController(controller, animated: true, completion: nil)
}
prepareForSegue
y establezca el valor de la vista de tabla que desee. Puede tomar la vista de tabla desde la propiedad 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
}
Para 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
}
SWIFT 3 (solución probada) - Transmisión de datos entre VC - Segue con NavigationController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let navigationContoller = segue.destination as! UINavigationController
let receiverViewController = navigationContoller?.topViewController as ReceiverViewController
receiverViewController.reveivedObject = sentObject
}
Sintaxis FIJA para 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
}