在这样的案例中,MVC最佳做法是什么?

时间:2012-04-23 14:10:38

标签: iphone objective-c ios ipad model-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,然后加载到我的viewDidLoad中吗?对于这种情况,MVC最佳实践是什么?

3 个答案:

答案 0 :(得分:1)

如果你觉得你的页眉和页脚可以重复使用,那么我会为那些新的课程。这里可重复使用并不意味着您将在应用程序的其他位置重用这些,这可能最终会完成。

如果情况并非如此,您只需添加一个可以从createHeader调用的方法viewDidLoad

答案 1 :(得分:1)

  

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

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

  

对于这种情况,MVC的最佳做法是什么?

这些视图和子视图都是MVC“V”部分的一部分。我想的越多,我就越认为,就像你现在拥有的东西一样,控制器正在做一些“V”工作。我并不是说这一定是坏事,但你应该考虑更好的分离,因为你的视图创建代码会变得更大。

答案 2 :(得分:0)

控制器通常是“老板” - 它将模型和视图结合在一起。因此,它可以对两个层都有深入的了解。从这个角度来看,创建视图层次结构并不一定是坏事,尽管@danh指出,你应该根据具体情况来决定。如果代码开始“嗅到”而不是继续并重构它。如果您的视图层次结构开始变得非常复杂,那么您可能需要引入可以划分责任的其他控制器。例如,您可能有控制器用于处理标题,另一个用于处理页脚等。