我理解模型 - 视图 - 控制器设计模式:有三个对象,模型,视图和控制器,其中视图执行所有绘图,接收用户交互并将报告返回给控制器。但是,在iOS中,你有UIViewController
,它是一个控制器,视图作为一个对象,所有的绘图和处理都在同一个对象中完成,不会违反MVC模式吗?难道你不能创建一个单独的UIView对象并将其链接到一个单独的控制器对象吗?
如果有人能帮助我清除它,那将是很棒的。谢谢!
答案 0 :(得分:1)
视图可以包含子视图,因此视图控制器可以将子视图添加到其主视图中,如下所示:
[self.view addSubview:[[MyNSViewSubclass alloc] initWith...]];
虽然您通常使用InterfaceBuilder执行此操作。
因此,一个视图控制器负责其主视图(.view
)及其子视图。
每个视图都实现-drawRect:
方法,控制器不应该知道有关其视图绘制的任何信息。
在某些情况下,您也有多个视图控制器(想想UINavigationController的导航堆栈),每个视图控制器都有自己的主视图。
这取决于。视图当然也可以[self addSubview:...];
。如果要以编程方式构造接口,我将从视图控制器执行此操作。如果您设计自定义视图并且发现它可以重用现有视图,则应将这些现有视图作为子视图添加到自定义视图类中。添加和删除顶级视图(我的意思是视图控制器的.view
的直接子级)应该从视图控制器完成IMHO。 (因为控制器负责获取其视图来表示模型,所以即使需要添加/删除子视图,它也应该这样做。)
这取决于。尽量使用Interface Builder,否则,让常识决定。