iOS
Unwind

[iOS]Unwindの基本手順

More than 3 years have passed since last update.

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