presentModalViewController
とpushViewController
を呼び出す場合の違いは何ですか?
これは、最初にプッシュされたビューから戻ることができるようにするためだけですか? Woooaaaaaa...。
違いは他の場所にあり、より深いと思います。番号 ?
最も重要な違いはセマンティクスについてです。モーダルビューコントローラーは通常、ユーザーが何らかの情報を提供するか、何かをしなければならないことを示します。このリンクはそれをより詳細に説明しています: http://developer.Apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html
彼らが話しているもう1つの、それほど抽象的な違いはありません。
「モーダルビューコントローラーを提示すると、システムは、提示を行ったビューコントローラーと提示されたビューコントローラーの間に親子関係を作成します。具体的には、提示を行ったビューコントローラーは、そのmodalViewControllerプロパティを更新して提示された(子)ビューコントローラ。同様に、提示されたビューコントローラは、そのparentViewControllerプロパティを更新して、それを提示したビューコントローラを指すようにします。」
このスレッドも参照してください: なぜ「現在のモーダルビューコントローラー」?
トランジション/アニメーションと、舞台裏での構造(aleph_nullのアルゴリズムが適切な説明を提供します)を無視すると、ユーザーが直面する唯一の違いは、ナビゲーションバーを使用して前のビューに自動的に戻る機能です。
pushViewController
を使用すると、ナビゲーションバーに[戻る]ボタンが自動的に表示されます。 presentModalViewController
を使用する場合は使用せず、通常、コントローラーの却下を処理するために独自のコントロールやコールバックを実装する必要があります。
概念的には、モーダルプレゼンテーションスタイルは通常、離れることができないアトミックタスクに使用されます(つまり、タスクを完了するかキャンセルし、どちらかを実行するまでアプリ内で他のことを実行できません)。
なぜそもそも違いがあるのか疑問に思っているのなら、私には言えません。個人的には、あるコントローラーから別のコントローラーに移動するための統合APIを提供するフレームワーク(cocos2dやAndroidなど)の方がはるかに理にかなっていると思います。
画像内のviewControllersを調べてください
今、あなたは自分自身に尋ねなければなりません
毎回ログイン+送信ページを表示する必要がありますか?前回ログインした場合でも、毎回ログインするのは首が痛い。これらの2つの画面は実際には画面の自然な流れに適合しません。どうしようか? presentViewController
を使用してモーダルに追加するだけです
ただし、残りのviewControllerについては、2つのナビゲーション内に保持して、簡単に前後に移動できるようにするため、pushViewController
を使用します。
詳細については、こちらをご覧になることをお勧めします video 画像も this すばらしい回答から選択されました。一見の価値があります。
これは私の経験によると、ビューの階層を管理したい場合は、ナビゲーションコントローラーのpushViewControllerを選択することをお勧めします。これは、ナビゲーションコントローラーのビューコントローラーのスタックのように機能します。ただし、親View Controllerでいくつかのアクションを実行する際のビューを表示するだけの要件である場合、最良の方法はそれをモーダルで表示することです。複雑なプッシュポップロジックが必要な場合は、常にpushViewControllerを優先します。
UINavigationControllerは、データのある種の階層表現が必要な場合(つまり、ドリルダウン)に使用されます。これらは、UIViewControllerサブクラスのスタックを使用して機能します。 「ドリルダウン」するたびに、スタックに別のViewControllerを追加するだけです。次に、「戻る」ロジックは、単にスタックからビューコントローラをポップするだけの問題です。
あなたはこのリンクをチェックすることができます: http://www.icodeblog.com/2011/10/11/back-to-basics-an-introduction-to-view-controllers/