Ich frage mich, wie die Funktionen im Titel funktionieren, und auch den Senderparameter.
Angenommen, ein Klick auf eine Schaltfläche ruft die performSegue-Methode auf. Ruft das auch die prepareSegue-Methode auf? Wird die prepareSegue-Methode vor der performSegue-Methode aufgerufen, aber nachdem die Schaltfläche gedrückt wurde?
Ist auch der Parameter "Sender" in beiden Funktionen verknüpft? Wenn ich in der performSegue-Methode einen String als Absender übergeben, wird dies in der sendSegue-Methode auf den sender-Parameter übertragen? Wenn ich also den Senderparameter in der performSegue-Methode als "Hallo Welt" setze, ist der Senderparameter in der prepareSegue-Methode auch derselbe String?
Vielen Dank
Es gibt effektiv zwei Möglichkeiten, wie Sie ein Segment auslösen können. Die erste erfolgt über eine Aktion für ein Oberflächenelement im Interface Builder, die zweite verwendet performSegueWithIdentifier:sender:
in Ihrem Code. Ich sage 'effektiv', weil unter den Deckeln, wenn die Szene aus dem Storyboard geladen wird, ein Aktionshandler konfiguriert wird, der schließlich performSegueWithIdentifier:sender:
aufruft.
Wenn performSegueWithIdentifier:sender:
aufgerufen wird, wird das Segue-Objekt an die prepareForSegue:sender:
-Funktion Ihres View-Controllers übergeben.
In dem Fall, in dem das Segment durch eine Aktion auf ein UI-Element initiiert wurde, ist der Sender dieses UI-Element (d. H. Wenn es sich um eine Aktionsverbindung für eine UIButton
handelt, ist die sender
die UIButton
-Instanz).
Wenn das Segment durch Ihren Code aufgerufen wird, der performSegueWithIdentifier:sender:
aufruft, ist die sender
das Objekt, das Sie als sender
übergeben haben. Dies könnte Ihr View Controller sein, ein Button, ein Array, irgendetwas. Wenn Sie also "Hello World" als sender
-Wert an performSegueWithIdentifier:sender:
übergeben, wird dies sender
in prepareForSegue:sender:
sein.
In der Reihenfolge der Operationen:
performSegueWithIdentifier:sender
wird entweder durch Ihren Code oder als Ergebnis einer Aktion für ein Oberflächenelement aufgerufenshouldPerformSegueWithIdentifier:sender:
implementiert, wird diese Funktion aufgerufen. Wenn diese Funktion false
zurückgibt, wird der Vorgang abgebrochenprepareForSegue:sender:
implementiert, wird diese Funktion aufgerufen.prepareForSegue:sender:
zurückkehrt, ist der Vorgang abgeschlossen.Die Methode performSegue ruft ein Segment auf, das von einer Ansicht zur anderen ausgeführt werden soll. Bevor das Segment tatsächlich stattfindet, wird die prepareForSegue-Methode aufgerufen. Wenn Sie Daten zwischen den Ansichten übergeben möchten, müssen Sie dies dort tun.
Die Methode performSegue nimmt nicht den Parameter an, den Sie senden möchten. Es wird nur verwendet, um das Segment an erster Stelle aufzurufen. Alle Daten, die Sie senden möchten, werden über prepareForSegue erstellt.
Hier ist ein Beispiel.
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
}
}
Lassen Sie mich wissen, ob das hilft!
The_Curry_Mans Antwort hat für mich funktioniert. Hier ist ein Update seines Codes für 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
}
}
meine zwei Cent für Anfänger ... In Swift 3 heißt es:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
}
Wenn der ankommende Controller (der Klasse MyController) also eine "fillData" -Methode implementiert:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destController = segue.destination as MyController{
destController.fillData(...)
}
}