LoginSignup
4
4

More than 5 years have passed since last update.

[iOS]Unwindの基本手順

Posted at

1.以下のシグネチャを持つアクションメソッド
-(IBAction)nameUnwindActionForSegue:(UIStoryboardSegue*)segue;
を遷移先に記述する(このメソッドの引数segueは、遷移元のビューコントローラを持っているので、結果データ等を引き継げる。また、戻り値は設定する必要は無い)

2.ストーリーボードエディタ上で、遷移元のシーンのEXITを選択して、Connectionインスペクタにリスティングされた1.のアクションメソッドと、senderになるボタンやセル等をCtrl+ドラッグで結びつける(Actionと結びつける)。

ここまでで、任意のビューコントローラに戻っていくという遷移が実行される。

なお、遷移先にデータを渡したい場合、
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
が呼ばれ、segueからControllerが渡るので、そこで処理する。

もう一つの方法は、1.は同じ。
2’.遷移元シーンのExitを選択して、Connectionインスペクタにリスティングされた
1の遷移先アクションメソッドと、遷移元ビューコントローラを結びつける(Manual)。
3.遷移元シーンにUnwindセグエが表示されるので、IDを設定する。IDは遷移先を表現するものにしておく。
4.遷移元にセグエのトリガメソッドを設定する(面倒)その際、performSegueWithIdentifierメソッドには3のIDを記述する。
スニペット
- (IBAction)<#controllName#>Did<#Action#>:(id)sender
{
// NSLog(@"%s %@",func, [sender description]);
[self performSegueWithIdentifier:@"<#Identifier#>" sender:self];
}

Unwindセグエを使う際の一番の課題は、画面間のデータの受け渡しをどうするかとカスタムセグエが使いたい場合(表示面での)。
データについては個人的には、ユーザーデフォルトを用いて、辞書で渡しあうのが、おそらく、キー値コーディングらしく、もっとも疎結合になって、よろしいのではないかと考える次第だが(逆にID文字列の検索しづらさみたいなものもあるが…)、
そうでないのであれば、ViewController同士で受け渡しをしないといけないため、参照し合うめんどくささもある。

canPerformUnwindSegueActionは、遷移可能かどうかを返却するが特殊ケースでないと使わないかも。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4