web-dev-qa-db-fra.com

Préparer Segue à Swift

Je fais face au message d'erreur:

"UIStoryboardSegue does not have a member named 'identifier'"

Voici le code à l'origine de l'erreur

if (segue.identifier == "Load View") {
    // pass data to next view
}

Sur Obj-C c'est bien comme ça:

if ([segue.identifier isEqualToString:@"Load View"]) {
   // pass data to next view
}

Qu'est-ce que je fais mal?

55
nikolausindra

Cela semble être dû à un problème dans le modèle de la sous-classe UITableViewController. Il est livré avec une version de la méthode prepareForSegue qui nécessiterait que vous dérouliez la séquence.

Remplacez votre fonction prepareForSegue actuelle par:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "Load View") {
        // pass data to next view
    }
}

Cette version ouvre implicitement les paramètres, donc ça devrait aller.

90
Cezar

Je pense que le problème est que vous devez utiliser le! dégrouper l'identifiant

J'ai

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]

        }

    }

Ma compréhension est que sans le! vous obtenez juste une valeur vraie ou fausse

35
Ryan Heitner

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
        }
    }
}
32
Zaid Pathan

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
                }

            }
     }
10
Scott Byrns KCL

Pour Swift 2.3, Swift3 et Swift4:

Créez une séquence performante sur didSelectRowAtindexPath

Pour Ex: 

   self.performSegue(withIdentifier: "uiView", sender: self)

Après cela, créez une fonction prepareforSegue pour capturer la séquence Destination et transmettre la valeur:

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 =

    }
    }

Vous devez créer une variable nommée UrlRec dans Destination ViewController.

10
Sandu

Préparez-vous à Segue dans Swift 4.2 et Swift 5.

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "OrderVC") {
        // pass data to next view
        let viewController = segue.destination as? MyOrderDetailsVC
        viewController!.OrderData = self.MyorderArray[selectedIndex]


    }
}

Comment appeler Segue sur un événement spécifique (comme un clic de bouton, etc.):

performSegue(withIdentifier: "OrderVC", sender: self)
1
M Murteza

c’est l’une des façons d’utiliser cette fonction, c’est lorsque vous souhaitez accéder à une variable d’une autre classe et modifier la sortie en fonction de cette variable.

   override func prepare(for segue: UIStoryboardSegue, sender: Any?)  {
        let something = segue.destination as! someViewController
       something.aVariable = anotherVariable
   }
1
alex's

Si vous n'utilisez pas le même contrôleur de vue de destination avec des identifiants différents, le code peut être plus concis que les autres solutions (et évite le as! dans certaines des autres réponses):

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    if let myViewController = segue.destinationController as? MyViewController { 
        // Set up the VC
    }
}
0
Taylor