web-dev-qa-db-fra.com

Transférer des données en segue

Je fais une application iOS simple avec le contrôleur tableview et detailView. Tout ce que je veux, c'est transmettre des données par la segue.

this is how it looks like

voici à quoi ça ressemble.

Tout ce que je veux, c’est que vous cliquez sur "Markíza", il ouvrira l’URL numéro 1 et si vous cliquez sur "TV JOJ", il ouvrira l’URL numéro 2 dans le lecteur.

Mes cellules 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")]
63
patrikbelis

Swift fonctionne exactement comme Obj-C mais est retravaillé dans le nouveau langage. Je n'ai pas beaucoup d'informations dans votre message mais donnons un nom à chaque TableViewController pour m'aider dans mon explication.

HomeTableViewController (c'est la capture d'écran que vous avez ci-dessus)

PlayerTableViewController (il s'agit de l'écran du lecteur vers lequel vous souhaitez vous rendre)

Cela dit, dans PlayerTableViewController, vous devez avoir une variable qui stockera les données transmises. Juste sous votre déclaration de classe, ayez quelque chose comme ceci (si vous avez l'intention de stocker la structure en tant qu'objet unique plutôt que dans le tableau:

class PlayerTableViewController: UITableViewController {

    var programVar : Program?

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

Après cela, vous pouvez envoyer des données au nouveau TableViewController de deux manières.

1) Utilisation de prepareForSegue

Au bas de HomeTableViewController, vous utiliserez les méthodes prepareForSegue pour transmettre les données. Voici un exemple du code que vous utiliserez:

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
    }
}

Une fois que PlayerTableViewController a chargé la variable sera déjà définie et utilisable

2) Utilisation de didSelectRowAtIndexPath

Si des données spécifiques doivent être envoyées en fonction de la cellule sélectionnée, vous pouvez utiliser didSelectRowAtIndexPath. Pour que cela fonctionne, vous devez attribuer un nom à votre séquence dans la vue Storyboard (faites-moi savoir si vous devez également savoir comment procéder).

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

Faites-moi savoir si vous avez besoin d'autres informations à ce sujet

127
Sasha Reid

Avec Swift 3 & 4

Dans le premier ViewController (envoyer la valeur)

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

Dans le deuxième viewController (Catch The Value)

var verificationId = String()
37
Imtee

Si vous n'avez pas besoin de discerner l'action par l'identifiant mais uniquement par la classe cible ...

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