2017-07-10 1 views
1

Comment faire deux fonctions de remplacement de segue?Comment faire deux fonctions de segue?

@IBAction func doneBut(_ sender: UIButton) { 
    print("Done") 
    if pointInput.text!.characters.count < 500 { 
     self.performSegue(withIdentifier: "toResult", sender: self) 
    } 
    else { 
     self.performSegue(withIdentifier: "toWinner", sender: self) 
    } 

} 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "toResult" { 
     if segue.destination is ResultViewController { 

     } 
    } 
} 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "toWinner" { 
     if segue.destination is ResultViewController { 

     } 
    } 
} 

Quand je l'ai fait une autre fonction de priorité - une erreur est

'préparer (pour: l'expéditeur :)' a déjà été réinitialisée

Répondre

2

Vous devez remplacer prepare(for une seule fois et de distinguer les enchaînements par switch ing sur le identifier:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    switch segue.identifier { 
     case "toResult": 
     let destination = segue.destination as! ResultViewController 
     // prepare something 

     case "toWinner": 
     let destination = segue.destination as! ResultViewController 
     // prepare something 

     default: break 
    } 
} 

Pour activer l'entrée sur une utilisation de valeur Int cette version avec vérification de type:

@IBAction func doneBut(_ sender: UIButton) { 
    print("Done") 
    guard let inputText = pointInput.text, let inputInt = Int(inputText) else { 
      // inform the user about the error if needed 
      return 
    } 
    if inputInt < 500 { 
     self.performSegue(withIdentifier: "toResult", sender: self) 
    } else { 
     self.performSegue(withIdentifier: "toWinner", sender: self) 
    } 
} 
+0

Si l'utilisateur en entrée 500 et plus - Segue au VC A, d'autre si l'entrée à moins de 500 - Segue au VC B (Segue pour un bouton)! Comment puis-je le faire? Aidez-nous s'il vous plaît – GOODDUDE

+0

Utilisez votre 'IBAction' dans la question et préparez (pour segue' dans ma réponse.) Si vous n'avez pas besoin de passer des paramètres au contrôleur de vue de destination, vous pouvez omettre' prepare (pour segue' complètement – vadian

+0

est-il correct << @ IBAction func doneBut (_ expéditeur: UIButton) { print ("Done") si Int (pointInput.text!)! <500 { print ("Result") self.performSegue (withIdentifier: "toResult", expéditeur: auto) } si Int (pointInput.text)> = 500 { print ("Gagnant") self.performSegue (de withIdentifier: "toWinner", expéditeur: auto) }} >> – GOODDUDE

4

Vous ne pouvez remplacer une fois. Utilisez les instructions if pour faire correspondre les différents identifiants. Essaye ça.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "toResult" { 
     if segue.destination is ResultViewController { 

     } 
    } else if segue.identifier == "toWinner" { 
     if segue.destination is ResultViewController { 

     } 
    } 
} 
1

Non, vous ne devez pas écrire la même fonction deux fois. C'est exactement ce que cette erreur dit.

'préparer (pour: expéditeur :)' a déjà été remplacé

La fonction est déjà surchargée.

Essayez d'écrire comme ceci:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "toResult" { 
     if segue.destination is ResultViewController { 

     } 
    else if segue.identifier == "toWinner" { 
     if segue.destination is ResultViewController { 

     } 
     } 
} 
0

Essayons de comprendre votre problème à partir d'un message d'erreur.

« prepare (pour: l'expéditeur :) » a déjà été réinitialisée

vous ne pouvez pas avoir la même méthode (avec la même defination) plus d'une fois dans la même classe, il est contre POO. Supposons que le matin, votre père dit que "à 8h00, vous devez aller à l'école de toute façon".
Et après quelque temps, votre mère est venue vous dire que "à 8h00 vous devez aller chez votre tante pour l'aider".

Maintenant vous devenez confus et un peu la colère aussi parce que vous ne savez pas ce que vous allez faire à 8h00?
C'est ce qui se passe avec votre compilateur trop et erreurs montrent que s'il vous plaît laissez-moi savoir une chose que faire lorsque vous appelez cette fonction « préparer (pour: l'expéditeur :) »


Vous connaissez déjà les solutions de votre problème Donc, ne pas poster ici.
Ici, je veux juste que vous sachiez qu'il est facile de résoudre notre problème si nous le comprenons bien.
que par mon avis vadian a une solution agréable pour vous,