トランジションを備えた非ナビゲーションアプリケーション用のView Controller/nibアーキテクチャ?

StackOverflow https://stackoverflow.com/questions/2511558

質問

(多くのiPadアプリと同様に)iInavigation Root Control Control Systemを使用していないiPadアプリをいじめているため、各アプリの「ビュー」の自然な所有権はありません。本質的に、ドキュメントリストビューとドキュメント編集ビューの2つの基本ビューがあります。

選択したドキュメントから編集ビューに到達するために、Uiviewアニメーションで遊んでいます。

また、両方の「ビュー」に(異なるボタンを持つ)存在するツールバーも上部にあります。

ショーを実行しているuinavigationがないので、コンテナ全体を所有する1つのペン先と1つのビューコントローラーにますます多くのものを投げる傾向があります。しかし今、私は編集ビューが別のペン先の中に存在している場合、ドキュメントリストビューから編集ビューへのどのようにセグジュを取得するかを見つけようとしています。

誰かがこのようなアプリ構造について考えたり経験を持っていますか?些細な1スクリーンアプリまたはフルオンナビゲーションアプリを除く、コード/UI構造に関するベストプラクティスに欠けているドキュメントはありません。

ドキュメントに従って、同じ「画面」のサブコンポーネントを所有する親/子の視聴コントローラーが「想定される」とは限らないが、これは、基本的にアプリ全体を含み、正しくできない1つの大規模なホーンビューコントローラーを意味することを意味します。

これに「正しい答え」があるかどうかはわかりません。いくつかのインテリジェントな例や提案を探しています。何ヶ月もこの質問に触れた人はいないので、私は良いおしゃべりを生み出すために賞金を追加しています。 :)

ありがとう!

アップデート: :私はスプリットビューについて話していません。これは明らかにスプリットビューコントローラーによってうまく処理されています。代わりに、ドキュメントリストビューと独立した編集ビューを備えたAppleのiWorkアプリ(例:ページ)をご覧ください。これらはアニメーションによって関連しています。

たぶん、ここでの本当の質問は、どのように(またはあなたも)スプリットビューやナビゲーションコントローラーなどの「コンテナ」ビューコントローラーをどのように構築できますか?あなたはゼロからすべてのものを構築する必要がありますか?ビューコントローラー間の相互作用に隠されているように見えるため、私はあなたがそうであると感じています。もしそうなら、これについて考えていますか?

役に立ちましたか?

解決

ビューコントローラーの唯一の隠し配線は、SplitとNavigationのために宣言されたカテゴリをサポートするために必要なParentViewControllerを設定することです。

ビューコントローラーはネストされるように設計されており、各コントローラーはビュー階層の一部を所有しています。唯一の設計目標は、別のコントローラーのビュー階層にビューコントローラーが届かないことです。親ビューコントローラーは、通常、所有するビュー階層内にビューのフレームを設定できるように、子供のコントローラーを追加するための要求があります。チャイルドビューコントローラーは、別のコントローラーが所有しているため、コントロールするビューの監督に何もしてはなりません。制御するビューの中心やフレームを設定してはいけません。

たとえば、ナビゲーションコントローラーにはプッシュメソッドがあり、以前のコントローラービューを削除し、新しいコントローラービューを追加し、新しく追加されたビューのフレームを設定します。一般に、親ビューコントローラーは、子供のコントローラーのビューのフレームを自由に設定できますが、境界ではありません。

ナビゲーションコントローラーのアニメーションを変更したい場合は、アニメーション化された方法ですべてのメソッドを実装することから始めると思います。アニメーションを設定してから、アニメーションを締めくくる前にアニメーションフラグをオフにしてスーパーに電話してください。

他のヒント

UIKIT提供されたもの(ナビゲーション/タブバー/モーダル/など)の外でマルチビューコントロールのことを試したことはありませんが、なぜ機能しないのかわかりません。フードの下では、すべてがビューですが、UikitにはView Controllersの特別なビューがあることに注意してください。これは間違いなくシステムによる特別な処理があります(UiviewControllerにはラッパービューがあり、UinavigationControllerにはUinavigationTransitionViewなどがあります。 。)。

「ベストプラクティス」についてあまり心配しないことをお勧めします。あなたが望むことをする何かをコーディングするだけです。いくつかのオプション:

  • Viewクラスにロジックを貼り付けます(ewwww!)。私たちのアプリの1つがこれを行うので、カスタムの方法で回転を処理できます(回転するのではなく/アウトのスライドを表示)。代わりに、おそらく独自のView Controllerロジックを実装する必要があります。
  • モデルをビューに対応するコンポーネントに分割します。各ビューにコンポーネントをロードし、再帰的にサブコンポーネントをロードする方法を知らせます。その後、ビューコントローラーは「全体像」のものについて心配する必要があります。

また、EditViewと呼ばれるアウトレットに接続することにより、複数のNIBSを同じビューコントローラーにロードできることに注意してください。

-(EditView*)editView {
  if (!editView) {
    // Loads EditView into the outlet editView
    [NSBundle loadNibNamed:@"EditView" owner:self];
  }
  return editView;
}

また、ビューの階層に追加することを心配し、それを上にアンロードすることを心配する必要があります - (void)viewdunload(iPhone OS 3.0+)、編集モード中にメモリ警告があった場合にfiewdidloadに設定します。等...

簡単ではありませんが、UIは決してそうではありません。

スプリットビュー/ポップオーバービューで実装され、uisplitViewControllerで制御されるマスターディテールビューが必要です。

マスタービューはドキュメントリストであり、詳細ビューは編集ビューです。それぞれに独自のコントローラーがあります。 2つのコントローラー自体は、uisplitviewcontrollerによって管理されます。

SplitViewコントローラーを使用しないと、非常に同じように機能するものを手でコーディングするだけです。これは本当にAPIで簡単にやりたいことを行う唯一の方法であり、iPadユーザーが期待するレイアウトです。

見る スプリットビューインターフェイスを作成します 詳細については、iPadプログラミングガイド。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top