vistas pasar entre datos ios iphone uitableview swift detailview

ios - vistas - pasar datos entre view controllers swift



Pasar datos a través de segue (2)

Estoy haciendo una aplicación simple de iOS con el 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 haga clic en "Markíza", se abrirá el número de video de URL 1 y, si hace clic en "TV JOJ", se abrirá el número de video URL 2 en el reproductor.

Mis celdas de tableview:

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 se vuelve a trabajar en el nuevo idioma. No tengo mucha información de su 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 al que quieres viajar)

Dicho esto, en PlayerTableViewController necesitas tener una variable que almacene los datos pasados. Justo debajo de su declaración de clase tenga algo como esto (si tiene la intención de almacenar la estructura como un solo 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. Aquí hay un ejemplo del código que usará:

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 haya cargado, la variable ya estará configurada y será utilizable

2) Uso de didSelectRowAtIndexPath

Si se deben enviar datos específicos en función de qué celda se selecciona, puede usar didSelectRowAtIndexPath. Para que esto funcione, debes darle a tu segue un nombre en la vista del guión gráfico (avísame si necesitas saber cómo hacerlo 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) }

Avíseme si necesita alguna otra información sobre este


Con Swift 3 y 4

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