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 ()