2

UIViewController一度に 1 つだけを画面に表示する必要があることを複数の場所で読みました。しかし、それ以外の方法で必要なことを達成する方法がよくわかりません。

天気アプリを想像してみてください。複数のビュー (天気パネル) が追加されるスクロール ビューを持つ単一のビュー コントローラーがあります。おそらく、これらはすべてUIViewController、スクロールなども担当するmain によって追加および管理されます。

しかし、これらの各天気パネルが代わりに でありCarView、それぞれが特定の種類の車に関するデータと、そのデータを編集するためのいくつかのコントロールを備えていると想像してください。

CarViewControllers一連の があり、それぞれCarが操作できるプロパティを持つのは理にかなっていると思いませんか? それぞれCarViewControllerが車のデータ オブジェクト、ビュー、およびそれらを結合する役割を担い、メイン ビュー コントローラーは単純にそれぞれcarViewController.viewをスクロールビューに追加する役割を果たします。

これは再利用性とカプセル化に優れているのではないでしょうか? さらに便利なことは言うまでもありません。

4

2 に答える 2

1

それがあなたの人生を楽にするかどうかにかかっていると思います。私が好んで行う別の方法の 1 つはUIView、自動車などの「概念的な」モデルを表示するためだけに複合サブクラスを作成し、それらにカテゴリを記述して、特定のモデルの実装を使用してビュー情報を入力することです。そうすれば、モデルを変更するときにビューを再利用できますが、一部のロジックがビュー コントローラーを乱雑にすることはありません。UISegmentedControlまたは何かで切り替えられた根本的に異なるビューのようなもののためにView Controllerを予約しようとします。

編集: aUIViewとその入力カテゴリの例。

@interface CarView : UIView

@property (strong) UILabel *modelLabel;
@property (strong) UILabel *makeLabel;
@property (strong) UILabel *yearLabel;
//etc

@end

次に、モデル固有のカテゴリがありますが、ビューのカテゴリは実際にはコントローラー層により適合します。少しMVCに違反していますが、責任の割り当ての観点からはうまく機能し、メインビューの実装をデータ実装に結合せず、ビューコントローラーをよりスリムに保つので、トレードオフの価値があると思います.

@interface CarView (CarEntityPopulating)

- (void)populateFieldsWithEntity:(NSManagedObject *)entity;

@end

@implementation CarView (CarEntityPopulating)

- (void)populateFieldsWithEntity:(NSManagedObject *)entity
{
    self.modelLabel.text = [entity valueForKey:@"name"];
    self.makeLabel.text = [[entity valueForKey:@"make"] valueForKey:@"name"];
    self.yearLabel.text = [[entity valueForKey:@"year"] stringValue];
    //etc....
}
于 2012-10-01T21:28:35.860 に答える