Pasar datos a través de segue

Resuelto patrikbelis asked hace 54 años • 3 respuestas

Estoy haciendo una aplicación iOS simple con controlador Tableview y DetailView. Todo lo que quiero es pasar datos a través de segue.

Así es como esto luce

así es como se ve.

Todo lo que quiero es que hagas clic en "Markíza", se abrirá la URL del video número 1 y si haces clic en "TV JOJ", se abrirá la URL del video número 2 en el reproductor.

Mis celdas de vista de tabla:

    struct Program {
        let category : String
        let name : String
    }


   var programy = [Program]()
        self.programy = [Program(category: "Slovenské", name: "Markíza"),
                         Program(category: "Slovenské", name: "TV JOJ")]
patrikbelis avatar Jan 01 '70 08:01 patrikbelis
Aceptado

Swift funciona exactamente de la misma manera que Obj-C pero está reelaborado en el nuevo lenguaje. No tengo mucha información de tu publicación, pero démosle un nombre a cada TableViewController para ayudar con mi explicación.

HomeTableViewController (esta es la captura de pantalla que tienes arriba)

PlayerTableViewController (esta es la pantalla del reproductor a la que desea viajar)

Dicho esto, en PlayerTableViewController necesitas tener una variable que almacene los datos pasados. Justo debajo de su declaración de clase tiene algo como esto (si tiene la intención de almacenar la estructura como un único objeto en lugar de la matriz:

class PlayerTableViewController: UITableViewController {

    var programVar : Program?

    //the rest of the class methods....

Después de eso, hay dos formas de enviar datos al nuevo TableViewController.

1) Usando prepareForSegue

En la parte inferior de HomeTableViewController, utilizará los métodos prepareForSegue para pasar los datos. A continuación se muestra un ejemplo del código que utilizará:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    // Create a variable that you want to send
    var newProgramVar = Program(category: "Some", name: "Text")

    // Create a new variable to store the instance of PlayerTableViewController 
    let destinationVC = segue.destinationViewController as PlayerTableViewController
    destinationVC.programVar = newProgramVar
    }
}

Una vez que PlayerTableViewController se haya cargado, la variable ya estará configurada y será utilizable.

2) Usando didSelectRowAtIndexPath

Si es necesario enviar datos específicos según la celda seleccionada, puede usar didSelectRowAtIndexPath. Para que esto funcione, debes darle un nombre a tu transición en la vista del guión gráfico (avísame si necesitas saber cómo hacer esto también).

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    // Create a variable that you want to send based on the destination view controller 
    // You can get a reference to the data by using indexPath shown below
    let selectedProgram = programy[indexPath.row]

    // Create an instance of PlayerTableViewController and pass the variable
    let destinationVC = PlayerTableViewController()
    destinationVC.programVar = selectedProgram

    // Let's assume that the segue name is called playerSegue
    // This will perform the segue and pre-load the variable for you to use
    destinationVC.performSegueWithIdentifier("playerSegue", sender: self)
}

Déjame saber si necesitas alguna otra información sobre esto.

Sasha Reid avatar Oct 06 '2014 01:10 Sasha Reid

Con Swift 3 y 4

En el primer ViewController (enviar el valor)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "MainToTimer") {
        let vc = segue.destination as! YourViewController
        vc.verificationId = "Your Data"
    }
}

En la segunda vistaController (Capturar el valor)

var verificationId = String()
Imtee avatar Aug 03 '2017 01:08 Imtee

Si no necesita discernir la acción por el identificador sino sólo por la clase objetivo...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let vc = segue.destination as? YourViewController {
        vc.var_name = "Your Data"
    }
}
Andrea Leganza avatar Jan 20 '2019 11:01 Andrea Leganza