回答:
プッシュセグエは、ナビゲーションスタックに別のVCを追加しています。これは、プッシュを発信するVCが、スタックに追加されるVCが属するのと同じナビゲーションコントローラーの一部であることを前提としています。メモリ管理は、ナビゲーションコントローラとディープスタックの問題ではありません。あるVCから別のVCに渡すオブジェクトを処理している限り、ランタイムがナビゲーションスタックを処理します。視覚的な表示については、画像を参照してください。
モーダルセグエはモーダル別のVCを提示するだけで1つのVCです。VCは、ナビゲーションコントローラーの一部である必要はありません。モーダルに提示されるVCは、通常、提示する(親)VCの「子」であると見なされます。モーダルで表示されるVCは通常、ナビゲーションバーやタブバーよりも優れています。提示するVCは、作成および提示したモーダルVCを閉じる責任もあります。
お役に立てれば。
Swift 3.0およびXCode 8.2.1アップデート
1.セグエを押す
プッシュセグエの名前がShow segueに変更されました。プッシュセグエを作成するには、親のビューコントローラーをナビゲーションコントローラーに埋め込む必要があります。ナビゲーションコントローラーはナビゲーションバーを提供します。2つのビューコントローラーをプッシュセグエで接続すると、子ビューコントローラーのナビゲーションバーが自動的に上部に配置されます。子ビューコントローラーがナビゲーションスタックの上に追加されます。
プッシュセグエは、デフォルトの機能も提供します。子ビューコントローラーには、親ビューコントローラーに戻るための戻るボタンがあります。右にスワイプして子ビューコントローラをポップすることもできます。プッシュセグエのアニメーションは、ページを水平にスライドするようなものです。
ナビゲーションコントローラーにないビューコントローラーからプッシュセグエを作成することはできますが、そうすると、ナビゲーションバー、アニメーション、ジェスチャーなどのすべての機能が失われます。この場合、最初に親ビューコントローラーをナビゲーションビューコントローラーに埋め込んでから、子ビューコントローラーにプッシュセグエを作成する必要があります。
2.モーダルセグエ
一方、モーダルセグエ(つまり、モーダルに存在)は、現在のビューコントローラー上に存在します。子ビューコントローラーはナビゲーションビューコントローラーを継承しないため、ナビゲーションビューコントローラーを備えたビューコントローラーからモーダルセグエを提示すると、ナビゲーションバーは失われます。子ビューコントローラーをナビゲーションコントローラーに再度埋め込み、必要に応じて新しいナビゲーションスタックを開始する必要があります。親View Controllerに戻りたい場合は、これを自分で実装しdismiss
、コードから呼び出す必要があります。
モーダルセグエのアニメーションは、子ビューコントローラーがページの下部から表示されることです。ナビゲーションビューコントローラーもこのデモには含まれていません
プッシュビューはで構築する必要がありますnavigationController
。
をクリックしmaster view
、メニューバーで次のいずれかを選択します。
EDITOR->embed in->navigationController
pushView
で構築することもできnavigationController
、この答えは不完全です!
これは、ストーリーボードのカスタムプッシュおよびセグエメソッドを使用してコントロールをプッシュしています
そしてモーダルは、ストーリーボードを使用せずにビューをナビゲートする方法です。