繁体   English   中英

在viewDidLoad中编写代码是否违反MVC架构?

[英]Does writing code in viewDidLoad Violates MVC architecture?

我在一个客户项目中工作。 我在ViewDidLoad写了很多视图定制代码。 我有用于数据存储和访问的模型。 该项目运行良好。 他们聘请了一位新的iOS开发人员,他说该代码不符合MVC架构。 问为什么? 他说,视图是在viewDidLoad内部创建的,该视图是Class的控制器,因此这不是可接受的代码。 当它是真正的动态视图并且无法使用情节提要创建时,我们该怎么办。

我的回答是

从苹果doc

控制器对象

控制器对象充当一个或多个应用程序视图对象与其一个或多个模型对象之间的中介。 因此,控制器对象是一个通道,视图对象通过该通道了解模型对象的变化,反之亦然。 控制器对象还可以为应用程序执行设置和协调任务,并管理其他对象的生命周期。

我认为控制器有责任管理视图的外观。

viewDidLoad ,最好在此处编写一次性视图自定义代码。

但是,如果您向视图编写了很多配置代码。 我认为最好使用UIView的子类。 这使您的代码清晰明了,易于调试和维护。

您可以通过这种方式区分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/

希望这可以对您有所帮助。

理想情况下,您将为主视图提供一个专用类(该类由viewcontroller中的self.view访问)-从UIView派生。

在此视图类内(例如Myview.m)-您将在各种视图方法内创建其子视图-例如init (用于子视图的实例化), layoutsubviews (用于子视图的框架设置)和drawrect (任何图形绘制等)。视图具有NIB,一些处理也将进入awakeFromNib内部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM