19

Stack Overflowとここで説明されているように、dismissViewControllerAnimated:completion:との違いを理解しています。popViewControllerAnimated:

-dismissViewControllerAnimated:completion:メソッドは、メソッドによって提示された UIViewController を閉じるために使用されます -presentViewController:animated:completion:

-popViewControllerAnimated:UINavigationController のメソッドは、UINavigationController のメソッドによって表示されるコントローラーをポップするために使用され-pushViewController:animatedます。

[self dismissViewControllerAnimated:completion:]最近、ナビゲーション組み込みアプリでプッシュが表示された VC を閉じるために使用していたアプリで間違いを見つけました。私はピザを食べるべきときにフライドポテトを食べます。すべてが正常に機能し、VC が期待どおりに割り当て解除されたため、間違いに気付きませんでした。

私の質問:これら 2 つの方法を混同すると、どのような結果が生じるでしょうか?

4

2 に答える 2

1

これをうまく説明できるかどうかはわかりませんが、試してみてください。

現在、タブベースのアプリに取り組んでおり、各タブには独自のナビゲーション コントローラーがあります。サイド機能については、navbar の barbuttonitem をモーダル ビューに分岐させます (場合によっては、特定の機能のパスのバックスタックを制御するための新しいナビゲーション コントローラーへのモーダルがあります。

別のナビゲーション コントローラーからモーダルとして起動するナビゲーション コントローラーのルート ビューで、dismissViewController を呼び出します。(それが理にかなっていることを願っています。)

多分これはより良いです:

表示側のビュー コントローラーは、表示されたビュー コントローラーを閉じる役割を果たします。提示されたView Controller自体でこのメソッドを呼び出すと、メッセージが提示元のView Controllerに自動的に転送されます。

複数のビュー コントローラーを連続して提示し、提示されたビュー コントローラーのスタックを構築する場合、スタック内の下位のビュー コントローラーでこのメソッドを呼び出すと、その直接の子ビュー コントローラーと、スタック上のその子の上のすべてのビュー コントローラーが破棄されます。これが発生すると、最上位のビューのみがアニメーション形式で閉じられます。中間のView Controllerはスタックから単純に削除されます。最上位のビューは、そのモーダル遷移スタイルを使用して閉じられます。これは、スタック内の下位にある他のビュー コントローラーで使用されるスタイルとは異なる場合があります。

ナビゲーション ベースのビュー コントローラーをプッシュし、必要に応じて popViewController を使用します。ナビゲーションから分岐するものはすべてモーダルに導入し、その場合は必要に応じて disconnectViewController を使用します。

于 2013-10-29T20:51:54.387 に答える