手短に
アンワインド セグエ( exit セグエとも呼ばれる) を使用して、プッシュ、モーダル、またはポップオーバー セグエを戻ることができます (ナビゲーション バーからナビゲーション項目をポップしたり、ポップオーバーを閉じたり、モーダルに表示されたビュー コントローラーを閉じたりした場合と同様)。その上、実際には 1 つだけでなく、一連のプッシュ/モーダル/ポップオーバー セグエを介して巻き戻すことができます。たとえば、単一の巻き戻しアクションでナビゲーション階層の複数のステップを「戻る」ことができます。
アンワインド セグエを実行するときは、アンワインド先のビュー コントローラーのアクション メソッドであるアクションを指定する必要があります。
目的 C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
迅速:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
このアクション メソッドの名前は、ストーリーボードでアンワインド セグエを作成するときに使用されます。さらに、このメソッドはアンワインド セグエが実行される直前に呼び出されます。渡されたパラメーターからソース ビュー コントローラーを取得しUIStoryboardSegue
て、セグエを開始したビュー コントローラーとやり取りすることができます (たとえば、モーダル ビュー コントローラーのプロパティ値を取得するため)。prepareForSegue:
この点で、このメソッドは のメソッドと同様の機能を持っていますUIViewController
。
iOS 8 の更新: Unwind セグエは、ShowやShow Detailなどの iOS 8 のアダプティブ セグエでも動作します。
例
ナビゲーション コントローラーと 3 つの子ビュー コントローラーを含むストーリーボードを作成します。
Green View Controller から、Red View Controller に巻き戻す (戻る) ことができます。青から緑へ、または緑を経由して赤へとくつろぐことができます。巻き戻しを有効にするには、Red と Green に特別なアクション メソッドを追加する必要があります。たとえば、Red のアクション メソッドは次のとおりです。
目的 C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
迅速:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
アクション メソッドが追加された後、コントロールを押しながら終了アイコンにドラッグすることで、ストーリーボードでアンワインド セグエを定義できます。ここでは、ボタンが押されたときに緑から赤に巻き戻したいと考えています。
巻き戻したいView Controllerで定義されているアクションを選択する必要があります。
Blue から Red に巻き戻すこともできます (ナビゲーション スタックでは "2 ステップ離れています")。重要なのは、正しい巻き戻しアクションを選択することです。
アンワインド セグエが実行される前に、アクション メソッドが呼び出されます。この例では、緑と青の両方から赤へのアンワインド セグエを定義しました。UIStoryboardSegue パラメーターを使用して、アクション メソッドでアンワインドのソースにアクセスできます。
目的 C:
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
UIViewController* sourceViewController = unwindSegue.sourceViewController;
if ([sourceViewController isKindOfClass:[BlueViewController class]])
{
NSLog(@"Coming from BLUE!");
}
else if ([sourceViewController isKindOfClass:[GreenViewController class]])
{
NSLog(@"Coming from GREEN!");
}
}
迅速:
@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
println("Coming from BLUE")
}
else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
println("Coming from RED")
}
}
巻き戻しは、プッシュ/モーダル セグエの組み合わせによっても機能します。たとえば、モーダル セグエを使用して別のイエロー ビュー コントローラーを追加した場合、1 つのステップでイエローからレッドに戻ることができます。
コードからの巻き戻し
コントロールを押しながら何かをView ControllerのExitシンボルにドラッグして巻き戻しセグエを定義すると、ドキュメントアウトラインに新しいセグエが表示されます。
セグエを選択して属性インスペクターに移動すると、「識別子」プロパティが表示されます。これを使用して、セグエに一意の識別子を付与します。
この後、他のセグエと同様にコードからアンワインド セグエを実行できます。
目的 C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
迅速:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)