1

我有一个没有笔尖的视图控制器。我正在代码中创建视图。我一直在这样做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 然后加载到我的viewDidLoad. 这种情况的 MVC 最佳实践是什么?

4

3 回答 3

1

如果你觉得你的页眉和页脚可以重复使用,那么是的,我会为它们创建新的类。此处可重用并不意味着您将在应用程序的其他地方重用这些,只是最终可以完成。

如果不是这种情况,您可以简单地添加一个createHeader您将从中调用的方法viewDidLoad

于 2012-04-23T14:21:01.867 回答
1

这真的应该是一个子类 UIView,然后加载到我的 viewDidLoad 中吗?

在我看来:是的。我可能会有一个用于控制器视图的类,它将创建页眉和页脚视图(它们本身可以从 UIView 子类化)。

这种情况的 MVC 最佳实践是什么?

这些视图和子视图都是 MVC 的“V”部分的一部分。我想得越多,我就越认为,当你现在有东西时,控制器正在做一些“V”的工作。我并不是说这一定很糟糕,但是随着视图创建代码变得更大,您当然应该考虑更好的分离。

于 2012-04-23T14:26:13.847 回答
0

控制器通常是“老板”——它汇集了模型和视图。所以它可以对两个层都有深入的了解。从这个角度来看,让它创建视图层次结构并不一定是坏事,尽管正如@danh 指出的那样,您应该根据具体情况来决定。如果代码开始“闻起来”,那么请继续重构它。如果您的视图层次结构开始变得非常复杂,那么您可能需要引入额外的控制器来划分责任。例如,您可能有一个用于处理页眉的控制器,另一个用于处理页脚等。

于 2012-04-23T15:02:09.467 回答