我在一个客户项目中工作。我在ViewDidLoad
内写了很多视图自定义代码。我有数据存储和访问模型。
该项目工作正常。他们聘请了一位新的iOS开发人员,他说代码不符合MVC架构。问的原因是什么?他说视图是在viewDidLoad
内创建的,它是Class的控制器,因此它是不可接受的代码。当它真正动态的视图并且无法使用故事板创建时,我们应该怎么做。
答案 0 :(得分:3)
我的回答是否
来自apple doc
控制器对象
控制器对象充当应用程序的一个或多个视图对象与其一个或多个模型对象之间的中介。因此,控制器对象是视图对象通过其获知模型对象的变化的管道,反之亦然。控制器对象还可以为应用程序执行设置和协调任务,并管理其他对象的生命周期。
我认为控制器有责任管理视图的外观。
在viewDidLoad
中,最好在此处编写一次性视图自定义代码。
但是如果你在视图中写了很多配置代码。我认为最好使用UIView的子类。这使您的代码清晰,易于调试和维护。
答案 1 :(得分:1)
您可以通过这种方式区分Controller和View -
使用- (void)loadView {}
委托方法从viewcontroller
加载视图。
假设您有一个视图类 -
CustomView.h
CustomView.m -
- (id)init {
return [self initWithFrame:CGRectZero];
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.backgroundColor = [UIColor greenColor];
[self addSubview:self.centerView];
}
return self;
}
现在在你的ViewController中 -
- (void)loadView
{
self.view = [[CustomView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
}
请参阅以下网址了解更多详情 - http://matthewmorey.com/creating-uiviews-programmatically-with-auto-layout/
希望这可以帮到你。
答案 2 :(得分:0)
理想情况下,您的主视图(视图控制器中的self.view访问的视图)可以有一个专用的类 - 来自UIView。
在此视图类(例如Myview.m)中 - 您将在各种视图方法中创建其子视图 - 例如init
(用于实例化子视图),layoutsubviews
(用于子视图的框架设置)和drawrect
(任何图形绘制等)如果视图有NIB,一些处理也将进入awakeFromNib。