1

ペン先のないView Controllerがあります。コードでビューを作成しています。私はこのようにそれをしてきましたviewDidLoad

UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 475, 50.0)];
self.headerView = header;
self.headerView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:self.headerView];

UIView *footer = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.height - 50.0, 475, 50.0)];
self.footerView = footer;
self.footerView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
self.footerView.backgroundColor = [UIColor greenColor];
[self.view addSubview:self.footerView];

等々。しかし、私viewDidLoadがどんどん長くなるにつれて、これはコントローラーに入れるべきではないのではないかと感じています。これは本当にサブクラス化された UIView であり、その後 my にロードされますviewDidLoadか? このような状況での MVC のベスト プラクティスは何ですか?

4

3 に答える 3

1

これは本当にサブクラス化されたUIViewであり、viewDidLoadにロードされますか?

私の意見では:はい。私はおそらくコントローラーのビューのクラスを持っていて、それがヘッダービューとフッタービューを作成します(それ自体がUIViewからサブクラス化される可能性があります)。

この種の状況に対するMVCのベストプラクティスは何ですか?

これらのビューとサブビューはすべて、MVCの「V」部分の一部です。考えれば考えるほど、今のところ、コントローラーが「V」の仕事をしていると思います。それが必ずしも悪いと言っているわけではありませんが、ビュー作成コードが大きくなるにつれて、より良い分離を検討する必要があります。

于 2012-04-23T14:26:13.847 に答える
1

ヘッダーとフッターを再利用できると思われる場合は、それらの新しいクラスを作成します。ここで再利用できるからといって、アプリケーションの別の場所でこれらを再利用する必要はありません。

そうでない場合は、createHeaderから呼び出すメソッドを追加するだけですviewDidLoad

于 2012-04-23T14:21:01.867 に答える
0

コントローラーは通常「ボス」であり、モデルとビューをまとめます。したがって、両方のレイヤーの詳細な知識を持つことができます。この観点から、ビュー階層を作成することは必ずしも悪いことではありませんが、@danhが指摘したように、ケースごとに決定する必要があります。コードが「匂い」を発し始めたら、先に進んでリファクタリングしてください。ビュー階層が非常に複雑になり始めた場合は、責任を分割する追加のコントローラーを導入する必要がある場合があります。たとえば、ヘッダーを処理するためのコントローラー、フッターを処理するためのコントローラーなどがあります。

于 2012-04-23T15:02:09.467 に答える