手短に
アンワインドセグエ(とも呼ばれる終了セグエは、(あなたは、ナビゲーションバーからナビゲーションアイテムをポップポップオーバーを閉じたりモーダルモードで表示ビューコントローラを却下しているかのよう))プッシュ、モーダルまたはポップオーバーseguesをナビゲートバックに使用することができます。その上、1つだけでなく、一連のプッシュ/モーダル/ポップオーバーセグエを実際に巻き戻すことができます。たとえば、単一の巻き戻しアクションでナビゲーション階層の複数のステップを「戻る」ことができます。
アンワインドセグエを実行するときは、アンワインド先のビューコントローラーのアクションメソッドであるアクションを指定する必要があります。
Objective-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
迅速:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
このアクションメソッドの名前は、ストーリーボードで巻き戻しセグエを作成するときに使用されます。さらに、このメソッドは、アンワインドセグエが実行される直前に呼び出されます。渡されたUIStoryboardSegue
パラメーターからソースビューコントローラーを取得して、セグエを開始したビューコントローラーと対話できます(たとえば、モーダルビューコントローラーのプロパティ値を取得するため)。この点で、このメソッドにはのメソッドと同様の機能がprepareForSegue:
ありUIViewController
ます。
iOS 8の更新:アンワインドセグエは、表示や詳細の表示など、iOS 8の適応型セグエでも機能します。
例
ナビゲーションコントローラーと3つの子ビューコントローラーを備えたストーリーボードがあるとします。
Green View ControllerからRed View Controllerに戻る(戻る)ことができます。青から緑、または緑を介して赤にくつろぐことができます。巻き戻しを有効にするには、特別なアクションメソッドを赤と緑に追加する必要があります。たとえば、以下は赤のアクションメソッドです。
Objective-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
迅速:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
アクションメソッドが追加されたら、[終了]アイコンをコントロールドラッグして、ストーリーボードで巻き戻しセグエを定義できます。ここでは、ボタンが押されたときに緑から赤に巻き戻したいと思います。
巻き戻したいビューコントローラーで定義されているアクションを選択する必要があります。
また、ブルーからレッドに戻ることもできます(ナビゲーションスタックでは「2ステップ先」です)。重要なのは、正しい巻き戻しアクションを選択することです。
巻き戻しセグエが実行される前に、アクションメソッドが呼び出されます。この例では、グリーンとブルーの両方からアンワインドセグエをレッドに定義しました。UIStoryboardSegueパラメータを介してアクションメソッドで巻き戻しのソースにアクセスできます。
Objective-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つの手順で黄色から赤に戻ることができます。
コードからの巻き戻し
コントロールをドラッグしてビューコントローラーの出口シンボルにドラッグし、巻き戻しセグエを定義すると、新しいセグエがドキュメントアウトラインに表示されます。
セグエを選択して属性インスペクターに移動すると、「識別子」プロパティが表示されます。これを使用して、セグエに一意の識別子を与えます。
この後、アンワインドセグエは他のセグエと同じようにコードから実行できます。
Objective-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
迅速:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
やpopViewControllerAnimated:
同じことを達成することはできませんか?