iOS中的模型 - 视图 - 控制器

时间:2014-06-14 07:24:40

标签: ios model-view-controller

我理解模型 - 视图 - 控制器设计模式:有三个对象,模型,视图和控制器,其中视图执行所有绘图,接收用户交互并将报告返回给控制器。但是,在iOS中,你有UIViewController,它是一个控制器,视图作为一个对象,所有的绘图和处理都在同一个对象中完成,不会违反MVC模式吗?难道你不能创建一个单独的UIView对象并将其链接到一个单独的控制器对象吗?

如果有人能帮助我清除它,那将是很棒的。谢谢!

1 个答案:

答案 0 :(得分:1)

视图可以包含子视图,因此视图控制器可以将子视图添加到其主视图中,如下所示:

[self.view addSubview:[[MyNSViewSubclass alloc] initWith...]];

虽然您通常使用InterfaceBuilder执行此操作。

因此,一个视图控制器负责其主视图(.view及其子视图

每个视图都实现-drawRect:方法,控制器不应该知道有关其视图绘制的任何信息。

在某些情况下,您也有多个视图控制器(想想UINavigationController的导航堆栈),每个视图控制器都有自己的主视图。

更新

这取决于。视图当然也可以[self addSubview:...];。如果要以编程方式构造接口,我将从视图控制器执行此操作。如果您设计自定义视图并且发现它可以重用现有视图,则应将这些现有视图作为子视图添加到自定义视图类中。添加和删​​除顶级视图(我的意思是视图控制器的.view的直接子级)应该从视图控制器完成IMHO。 (因为控制器负责获取其视图来表示模型,所以即使需要添加/删除子视图,它也应该这样做。)

这取决于。尽量使用Interface Builder,否则,让常识决定。