prepareforsegue perform pass for data ios swift segue

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 }