タイトルの関数がどのように機能するか、またsenderパラメータについても疑問に思っています。
ボタンのクリックがperformSegueメソッドを呼び出すとしましょう。これは、prepareSegueメソッドも呼び出しますか? prepareSegueメソッドは、performSegueメソッドの前に、ただしボタンが押された後に呼び出されますか?
また、両方の関数の "sender"パラメータはリンクされていますか?文字列をperformSegueメソッドの送信者として渡した場合、それはprepareSegueメソッドの送信者パラメータに転送されますか?つまり、performSegueメソッドの送信者パラメーターを「Hi world」に設定すると、prepareSegueメソッドの送信者パラメーターも同じ文字列になりますか?
ありがとう
効果的には、セグエをトリガーする方法は2つあります。 1つ目はInterface BuilderのUI要素のアクションによるもの、2つ目はコードでperformSegueWithIdentifier:sender:
を使用する方法です。カバーの下でシーンがストーリーボードから読み込まれると、最終的にperformSegueWithIdentifier:sender:
を呼び出すアクションハンドラーが構成されているため、「効果的に」と言います
performSegueWithIdentifier:sender:
が呼び出されると、segueオブジェクトがビューコントローラーのprepareForSegue:sender:
関数に配信されます。
セグエがUI要素のアクションによって開始された場合、送信者はそのUI要素になります(つまり、UIButton
のアクション接続の場合、sender
はUIButton
instance)。
セグエがperformSegueWithIdentifier:sender:
を呼び出すコードによって開始された場合、sender
はsender
として渡したオブジェクトになります。これは、ビューコントローラー、ボタン、配列など、何でもかまいません。つまり、「Hello World」をperformSegueWithIdentifier:sender:
にsender
値として渡すと、これはprepareForSegue:sender:
のsender
になります。
操作の順序に関して:
performSegueWithIdentifier:sender
は、コードまたはUI要素のアクションの結果として呼び出されますshouldPerformSegueWithIdentifier:sender:
を実装している場合、この関数が呼び出されます。この関数がfalse
を返す場合、セグエはキャンセルされますprepareForSegue:sender:
を実装している場合、この関数が呼び出されます。prepareForSegue:sender:
が戻ると、セグエが完了します。PerformSegueメソッドは、ビュー間で実行されるセグエを呼び出します。セグエが実際に行われる前に、prepareForSegueメソッドが呼び出されます。ビュー間でデータを受け渡したい場合は、そこで実行します。
PerformSegueメソッドは、送信するパラメータを受け取りません。それはそもそもセグエを呼び出すためにのみ使用されます。送信するデータはすべてprepareForSegueを介して送信されます。
ここに例があります。
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
}
}
これが役立つかどうか教えてください!
The_Curry_Manの答えがうまくいきました。これは、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
}
}
初心者のための私の2セント... Swift 3は:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
}
したがって、到着したコントローラー(クラスMyControllerの)が「fillData」メソッドを実装する場合:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destController = segue.destination as MyController{
destController.fillData(...)
}
}
Swift 5)の更新されたメソッド
performSegue(withIdentifier: "showNextViewController", sender: self)
注:「showNextViewController」はストーリーボードのセグエに追加される識別子です