Je m'interroge sur le fonctionnement des fonctions du titre et sur le paramètre expéditeur.
Supposons qu'un clic sur un bouton appelle la méthode performSegue. Est-ce que cela appelle également la méthode prepareSegue? La méthode prepareSegue est-elle appelée avant la méthode performSegue mais après avoir appuyé sur le bouton?
De plus, le paramètre "sender" dans les deux fonctions est-il lié? Si je transmets une chaîne en tant qu'expéditeur dans la méthode performSegue, cela sera-t-il transféré vers le paramètre expéditeur dans la méthode prepareSegue? En d'autres termes, si je configure le paramètre sender dans la méthode performSegue sur "Hi world", le paramètre sender dans la méthode prepareSegue sera-t-il également la même chaîne?
Merci
Il existe effectivement deux manières de déclencher une transition. La première consiste à effectuer une action sur un élément d'interface utilisateur dans Interface Builder, la seconde à utiliser performSegueWithIdentifier:sender:
dans votre code. Je dis 'effectivement', car sous les couvertures, lorsque la scène est chargée depuis le storyboard, un gestionnaire d'action est configuré pour appeler finalement performSegueWithIdentifier:sender:
Lorsque performSegueWithIdentifier:sender:
est appelé, l'objet Segue est remis à la fonction prepareForSegue:sender:
de votre contrôleur de vue.
Dans le cas où la séquence a été initiée par une action sur un élément d'interface utilisateur, l'expéditeur sera alors cet élément d'interface utilisateur (c'est-à-dire s'il s'agit d'une connexion d'action sur une UIButton
, alors la sender
sera l'instance UIButton
.
Si la séquence est initiée par votre code appelant performSegueWithIdentifier:sender:
, la sender
sera alors l'objet que vous avez transmis en tant que sender
. Cela pourrait être votre contrôleur de vue, un bouton, un tableau, n'importe quoi. Donc oui, si vous transmettez "Hello World" à performSegueWithIdentifier:sender:
en tant que valeur sender
, il s'agira alors de la sender
dans prepareForSegue:sender:
En termes d'ordre des opérations:
performSegueWithIdentifier:sender
est appelé, soit par votre code, soit à la suite d'une action sur un élément de l'interface utilisateur.shouldPerformSegueWithIdentifier:sender:
, cette fonction est appelée. Si cette fonction renvoie false
, la transition est annulée.prepareForSegue:sender:
, cette fonction est appelée.prepareForSegue:sender:
est revenu, la séquence est terminée.La méthode performSegue appelle une séquence à exécuter d'une vue à une autre. Avant que la transition ait lieu, la méthode prepareForSegue est appelée et si vous souhaitez transmettre des données entre les vues, vous le feriez à cet endroit.
La méthode performSegue ne prend pas le paramètre que vous voulez envoyer. Il est seulement utilisé pour appeler la segue en premier lieu. Toutes les données que vous souhaitez envoyer se feront via prepareForSegue.
Voici un exemple.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
performSegueWithIdentifier("test", sender: self)
//You can set the identifier in the storyboard, by clicking on the segue
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "test"{
var vc = segue.destinationViewController as! RandomViewController
vc.data = "Data you want to pass"
//Data has to be a variable name in your RandomViewController
}
}
Faites-moi savoir si cela aide!
La réponse de The_Curry_Man a fonctionné pour moi. Voici une mise à jour de son code pour Swift 3.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
performSegue(withIdentifier: "test", sender: self)
//You can set the identifier in the storyboard, by clicking on the segue
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "test"{
var vc = segue.destinationViewController as! RandomViewController
vc.data = "Data you want to pass"
//Data has to be a variable name in your RandomViewController
}
}
mes deux cents pour les débutants ... Dans Swift 3, c'est:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
}
Donc, si le contrôleur arrivé (de la classe MyController) implémente une méthode "fillData":
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destController = segue.destination as MyController{
destController.fillData(...)
}
}