13

絞首刑執行人ゲームをコーディングしようとしていますが、セグエの巻き戻しに問題があります。ユーザーが実際の絞首刑執行人を演じる同じビューに最終的につながる複数のView Controllerがあります。ただし、提示するコントローラーに応じて、ゲームをさまざまな「モード」(つまり、マルチプレイヤー、シングルプレイヤーなど) にする必要があります。前のView Controllerに巻き戻す再生ボタンを追加しようとしていますが、ユーザーがこのビューに到達するために複数のパスを使用した可能性がある場合、巻き戻す方法がわかりません.

つまり、私のアプリは次のようになります。

A -> B -> C または

A -> D -> C で、C は (理想的には) D または B に巻き戻すことができます。

これを実装する最良の方法は何ですか?すべてのビュー コントローラーをナビゲーション コントローラーに埋め込む必要がありますか? または、特定の条件に基づいて特定のビュー コントローラーを提示する方法はありますか? 助けてくれてありがとう!

4

3 に答える 3

10

アンワインド セグエ プロセスは、通常、以前の UIViewController インスタンスを自動的に決定します。正確なプロセスは Apple のこのTech Noteに記載されていますが、要約すると次のようになります。

アンワインド セグエを開始したビュー コントローラーから始まる検索順序は次のとおりです。

  1. レスポンダ チェーンの次のビュー コントローラに viewControllerForUnwindSegueAction:fromViewController:withSender: メッセージが送信されます。モーダルに表示されるビュー コントローラの場合、これは を呼び出したビュー コントローラになります presentViewController:animated:completion:。それ以外の場合は、parentViewController.

    childViewControllersデフォルトの実装では、アンワインド アクションを処理するビュー コントローラーをレシーバーの配列で検索します。レシーバーの子ビュー コントローラーのいずれもアンワインド アクションを処理しない場合、レシーバーはアンワインド アクションを処理するかどうかを確認し、処理する場合は self を返します。どちらの場合も、この canPerformUnwindSegueAction:fromViewController:withSender:メソッドを使用して、特定のビュー コントローラーがアンワインド アクションを処理する必要があるかどうかを判断します。

  2. 手順 1 でビュー コントローラーが返されない場合 viewControllerForUnwindSegueAction:fromViewController:withSender:、レスポンダー チェーン内の次のビュー コントローラーから検索が繰り返されます。

したがって、正確なプロセスは、View Controller C をどのように提示したかによって異なります。たとえば、a のモーダル プレゼンテーション セグエまたはプッシュ セグエを使用しますUINavigationControllerが、B と D の両方がアンワインド アクションを実装している限り、問題はありません。

于 2015-07-24T22:26:20.613 に答える
4

popViewController:animatedナビゲーション スタックにプッシュしたdismissViewController:animated場合、またはモーダルに表示された場合は、単にコードを呼び出して、表示中のコントローラーに移動します。

于 2015-07-24T21:36:05.490 に答える