apple ios swift uistoryboard uistoryboardsegue

ios - apple - main storyboard xcode



Prepárate para Segue en Swift (9)

¡Creo que el problema es que tienes que usar el! para desagregar el identificador

yo tengo

override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) { if segue!.identifier == "Details" { let viewController:ViewController = segue!.destinationViewController as ViewController let indexPath = self.tableView.indexPathForSelectedRow() viewController.pinCode = self.exams[indexPath.row] } }

Mi entendimiento es que sin el! solo obtienes un valor verdadero o falso

Estoy frente al mensaje de error:

"UIStoryboardSegue does not have a member named ''identifier''"

Aquí está el código que causa el error

if (segue.identifier == "Load View") { // pass data to next view }

En Obj-C está bien usar así:

if ([segue.identifier isEqualToString:@"Load View"]) { // pass data to next view }

¿Qué estoy haciendo mal?


Cambie el identificador de segue en el panel derecho en la sección con una identificación. icono para que coincida con la cadena que utilizó en su condicional.


Esto parece deberse a un problema en la plantilla de subclase UITableViewController . Viene con una versión del método prepareForSegue que requeriría que desenvuelva la transición.

Reemplace su función actual prepareForSegue con:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { if (segue.identifier == "Load View") { // pass data to next view } }

Esta versión desenvuelve implícitamente los parámetros, por lo que debería estar bien.


Para Swift 2.3:

Crear un Segue realizado en didSelectRowAtindexPath

Por ejemplo:

self.performSegue(withIdentifier: "uiView", sender: self)

Después de eso, crea una función prepareforSegue para capturar el destino segue y pasa el valor:

Ex:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "uiView"{ let destView = segue.destination as! WebViewController let indexpath = self.newsTableView.indexPathForSelectedRow let indexurl = tableDatalist[(indexpath?.row)!].link destView.UrlRec = indexurl //let url = } }

Necesita crear una variable llamada UrlRec en Destination ViewController


Siempre que no esté utilizando el mismo controlador de vista de destino con diferentes identificadores, el código puede ser más conciso que las otras soluciones (y evita el as! En algunas de las otras respuestas):

override func prepare(for segue: NSStoryboardSegue, sender: Any?) { if let myViewController = segue.destinationController as? MyViewController { // Set up the VC } }


Swift 1.2

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { if (segue.identifier == "ShowDeal") { if let viewController: DealLandingViewController = segue.destinationViewController as? DealLandingViewController { viewController.dealEntry = deal } } }


esta es una de las formas en que puede usar esta función, es cuando desea acceder a una variable de otra clase y cambiar la salida en función de esa variable.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let something = segue.destination as! someViewController something.aVariable = anotherVariable }


Swift 4, Swift 3

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "MySegueId"{ if let nextViewController = segue.destination as? NextViewController{ nextViewController.valueOfxyz = "XYZ" //Or pass any values nextViewController.valueOf123 = 123 } } }


override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) { if(segue!.identifier){ var name = segue!.identifier; if (name.compare("Load View") == 0){ } } }

No puede comparar el identificador con == tiene que usar el método compare ()