Pasar datos a través de segue
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 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")]
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.
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()
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"
}
}