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は、遷移可能かどうかを返却するが特殊ケースでないと使わないかも。