私は に のUIViewController派生クラスを使用する必要がありますが私のアプリの画面ごと 機能を分離しますか?
はい。
そして、私のアプリは、基本的に、そのコンポーネントと 私のシーンを構築するだろうこれらのビュー のコントローラのいずれかに 制御を引き渡すでしょうか?
はい、多くのVCはペン先からビューツリーを取得しますが、コアコントローラの責任に関心があります。モデルの変化をさまざまなビューフィールドに伝播させます。 2.ビューイベントをモデル上の適切なアクションに戻す。私はInterfaceBuilderのハングを取得することをお勧めします。それは不完全で迷惑なものですが、それはあなたに数時間の作業と大量のコードを救うことができます。
関連するビューコントローラに切り替えるにはどうすればよいですか?
いくつかの方法:あなたのVCは、ナビゲーションコントローラでホストされている場合は
- は、
[[self navigationController] pushViewController:theNextVC animated:YES]
は、一般的なイディオムです。
- VCのセット間で明確な階層がない場合は、
UITabBarController
を使用するのが最適です。
- モーダル積み重ねを行いたい場合は、
[self presentModalViewController:theNextVC animated:YES]
です。 1つか2つ以上のモーダルスタックは扱いにくいです。
- 最初のVCを提示するには4.xでウィンドウのrootViewControllerプロパティに割り当てます(アプリケーションデリゲートがこれを行うことができます)。または前の4のために、伝統的な方法は、通常、アプリケーションの代理人に見つかりました:
[myMainWindow addSubview:[myInitialVC view]]
。
- リンゴ提供のVC(ビデオ、フォトピッカー)には、独自のプレゼンテーション方法があります。
最初の2つの方法では、UIウィジェットは動作させたくない場合は、ナビゲーションバーまたはタブバーを非表示にして、すべてをプログラムで実行できます。
結果としてloadViewを呼び出す必要がありますか?
あなたの「私は今現れています!」ロジックはviewWillAppear:
(遷移アニメーションが開始する前に呼び出され、ビューにはまだ親が存在しません)に属し、viewDidAppear:
(アニメーションの後にビューが完全に表示されるときに呼び出されます)。loadView
は、ビューがすぐに必要と思われるメモリ不足の状態でビューがダンプされ、再作成が必要な場合を除き、再度呼び出されることはありません。
loadView
を他のビューツリー構築方法で完全に置き換えたい場合は、オーバーライドしてください。私はこれをやり始めましたが、めったにそうはなりません。
通常のnibローディングを依然として実行したいときには、viewDidLoad
を上書きするだけでなく、独自のビューツリーの作成/後処理をしたい場合もあります。これは自分が99%の時間を費やしていることがわかります。
たとえば、画面Bに移動するトリガーが呼び出されると、自分のビューを「遷移する」ように呼び出すと、他のビューコントローラーを呼び出して「ビューを設定」し、 ?
前述のいずれかのプレゼンテーション方法を使用すると、移行が発生します。あなたがする必要があるのは、viewWill/DidAppearと友人を実装して、起こったときに通知することだけです。
"TheElements"サンプルプロジェクトを調べることができます(xcodeドキュメントで "the elements"を検索してください)。要求に応じて、nibsは使用しません。コード内のすべてを難しい方法で設定します。 TabBarControllerとNavigationControllerを使用する良い例があり、推奨される方法でVC間の責任を分けています。
たくさんの言葉。参考になった場合は、それを編集してください。 – rgeorge
一般的な解決策が必要なように聞こえるが、タブバーのコントローラーが私の探しているものかもしれないが、このクラスでどこでトランジションを処理するのか分かりますか?あるスクリーンから別のスクリーンに切り替えるためにselectedViewControllerプロパティを設定している場合、どこで遷移が起こりますか?また、各ウィジェットが独自のexitを行うように、私のカスタム設定をカスタマイズしたい場合は、コントローラを変更したり、exitアニメーションの終わりまでコントローラーの変更をトリガーするのを待ったりして、それらのアニメーションをトリガーする必要があります。前者の場合は、新しい画面の入り口のアニメーションを遅らせる必要がありますか? – Joey
もう一つの質問は、なぜ私は最初にタブバーコントローラが必要なのでしょうか?それは、移行を簡単にする組込み機能をいくつか持っていますか?なぜ私は単に私のウィンドウにcontrollerA.viewを追加しないのですか?次の画面が必要な時は、そのビューを削除してcontrollerB.viewを追加しますか?私のケースではタブバーが不可欠であるという新旧の移行の移行のいくつかの処理はありますか? – Joey