web-dev-qa-db-ja.com

iOS-pushViewControllerとpresentModalViewControllerの違い

presentModalViewControllerpushViewControllerを呼び出す場合の違いは何ですか?

  • アニメーションはNOに設定されています(はいの場合でも、変更可能なアニメーションスタイルです)。
  • モーダルビューを表示するときにナビゲーションコントローラーが定義されるため、コールスタックを使用してナビゲートすることもできます。

これは、最初にプッシュされたビューから戻ることができるようにするためだけですか? Woooaaaaaa...。

違いは他の場所にあり、より深いと思います。番号 ?

24
Oliver

最も重要な違いはセマンティクスについてです。モーダルビューコントローラーは通常、ユーザーが何らかの情報を提供するか、何かをしなければならないことを示します。このリンクはそれをより詳細に説明しています: http://developer.Apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

彼らが話しているもう1つの、それほど抽象的な違いはありません。

「モーダルビューコントローラーを提示すると、システムは、提示を行ったビューコントローラーと提示されたビューコントローラーの間に親子関係を作成します。具体的には、提示を行ったビューコントローラーは、そのmodalViewControllerプロパティを更新して提示された(子)ビューコントローラ。同様に、提示されたビューコントローラは、そのparentViewControllerプロパティを更新して、それを提示したビューコントローラを指すようにします。」

このスレッドも参照してください: なぜ「現在のモーダルビューコントローラー」?

12
aleph_null

トランジション/アニメーションと、舞台裏での構造(aleph_nullのアルゴリズムが適切な説明を提供します)を無視すると、ユーザーが直面する唯一の違いは、ナビゲーションバーを使用して前のビューに自動的に戻る機能です。

pushViewControllerを使用すると、ナビゲーションバーに[戻る]ボタンが自動的に表示されます。 presentModalViewControllerを使用する場合は使用せず、通常、コントローラーの却下を処理するために独自のコントロールやコールバックを実装する必要があります。

概念的には、モーダルプレゼンテーションスタイルは通常、離れることができないアトミックタスクに使用されます(つまり、タスクを完了するかキャンセルし、どちらかを実行するまでアプリ内で他のことを実行できません)。

なぜそもそも違いがあるのか​​疑問に思っているのなら、私には言えません。個人的には、あるコントローラーから別のコントローラーに移動するための統合APIを提供するフレームワーク(cocos2dやAndroidなど)の方がはるかに理にかなっていると思います。

17
aroth

画像内のviewControllersを調べてください

  • 左上の上位2つのviewControllers(login&submit)は、tabBarController&NavigationControllerからdisconnectedです。
  • 残りのviewControllerはNavigationControllerに埋め込まれています。それらはどういうわけかアプリの自然な流れに属しています。

今、あなたは自分自身に尋ねなければなりません

毎回ログイン+送信ページを表示する必要がありますか?前回ログインした場合でも、毎回ログインするのは首が痛い。これらの2つの画面は実際には画面の自然な流れに適合しません。どうしようか? presentViewControllerを使用してモーダルに追加するだけです

ただし、残りのviewControllerについては、2つのナビゲーション内に保持して、簡単に前後に移動できるようにするため、pushViewControllerを使用します。

enter image description here

詳細については、こちらをご覧になることをお勧めします video 画像も this すばらしい回答から選択されました。一見の価値があります。

3
Honey

これは私の経験によると、ビューの階層を管理したい場合は、ナビゲーションコントローラーのpushViewControllerを選択することをお勧めします。これは、ナビゲーションコントローラーのビューコントローラーのスタックのように機能します。ただし、親View Controllerでいくつかのアクションを実行する際のビューを表示するだけの要件である場合、最良の方法はそれをモーダルで表示することです。複雑なプッシュポップロジックが必要な場合は、常にpushViewControllerを優先します。

1
GhostCode

UINavigationControllerは、データのある種の階層表現が必要な場合(つまり、ドリルダウン)に使用されます。これらは、UIViewControllerサブクラスのスタックを使用して機能します。 「ドリルダウン」するたびに、スタックに別のViewControllerを追加するだけです。次に、「戻る」ロジックは、単にスタックからビューコントローラをポップするだけの問題です。

あなたはこのリンクをチェックすることができます: http://www.icodeblog.com/2011/10/11/back-to-basics-an-introduction-to-view-controllers/

0
prohuutuan