3

iOS では、画面に多くの機能が詰め込まれている場合、同じ画面に多くのメソッドが定義されているため、View Controller のコードをきれいに保つのに苦労します。特に ( 、 など) のデリゲート メソッドを使用するUITableView場合UIAlertViewや、同じ VC ファイルが iPad と iPhone の両方をサポートする場合は、すぐに混乱します。

#ifdefまた、ステートメントを使用すると、適切なグループ化が崩れることにも気付きました#pragma mark - Title。質問 1 - 非常にかさばる View Controller を整理するための方法は何ですか?

質問 2 - 同様に、いくつかの部分的なコンポーネント (たとえば、下部メニュー、上部メニュー、サイド メニューなど) を含むページの場合、次のパターンをどのように見つけますか?

UIViewController *vc_component = ...
[self.view addSubview:vc_component.view];

vc_componentビューのすべての相互作用を処理するため、MVC に関しては正しいように思えます。私を悩ませている唯一のことは、同時に同じ画面を担当するビューコントローラーがいくつかあるという事実です。これは理想的な IMO ではありません。

ご意見をお待ちしております。

4

2 に答える 2

1

私の経験では、1 つの View Controller に多くのコードが含まれている場合、このコードを別のクラスに取り込もうとします。たとえば、私のView Controllerには、モデルオブジェクトを管理するためのいくつかのコントロールを処理するパネルが含まれています。この場合、ModelPanelControlビューを作成し、その実装にすべてのロジックを配置してから、View Controller のサブビューにします。ただし、View Controller へのデリゲート呼び出しが多い場合は、これらの呼び出しをプラグマ マークで分割する限り、問題はないと思います。

2 番目の質問に答えるには、プロジェクトが >= iOS5 であると想定します。これは、1 つの画面に複数のビュー コントローラーを追加するために使用できる非常に優れたビュー コンテインメント API があるためです。ここにドキュメントがあり、Implementing UIViewController Containment と呼ばれる WWDC 2011 ビデオも見ることができます。

これがあなたの質問に答えることを願っています。乾杯!

于 2013-08-29T15:48:11.653 に答える
1

最初の質問への回答として、実際に 1 つのコンテナー viewController によって複数の viewController を管理している場合、それらの viewController のそれぞれをdelegate明示的な関数にしないのはなぜですか? したがって、そのviewControllerからUIAlertViewまたはUIActionSheetをトリガーするボタンアクションなどは、これらの特定のアラートのデリゲートになりますか?

そこにあるいくつかのブロックUIKitカテゴリを調べることもできます. Mugunth Kumar という名前の紳士には、UIAlertView+MKBlockAdditions というものがあります。これは、多数のデリゲート スパゲッティを取り除くのに非常に便利であることがわかりました。

他のすべての viewController が継承するベース UIViewController を定義するのが一般的です。ここで、すべての一般的なヘルパー メソッドを実装します。最小公分母をそこに置き、残りのコントローラーをこのサブクラスに設定します。これは、少なくともコピーと貼り付けの問題、および DRY パラダイムに役立ちます。

最後に、iOS5 までは、すべてのサブビューで回転メソッドが自動的に呼び出されなかったため、viewControllers 内に viewControllers をカプセル化するのは面倒でした。ワークフローは次のようになります。

[viewControllerContainer addChildViewController:anotherViewController];
[viewControllerContainer.view addSubview:anotherViewController.view];
[anotherViewController didMoveToParentController:viewControllerContainer];

それはOSに誰が誰を担当しているかを教えます。

于 2013-08-29T16:59:48.033 に答える