使用MVC时是否需要创建单独的视图类?

时间:2011-12-05 21:28:56

标签: iphone objective-c model-view-controller

在观看斯坦福iTunesU CS193p在线课程后,我对快速实施MVC设计的方法提出了疑问。

通常当我做一个应用程序时,我将我的视图设置为控制器的一部分,并添加UIBabtons,UILabels等。基本上控制器和视图成为一体,除非您将UIObject视为视图对象

在早期的一个CS193p示例中,教师将视图从控制器中拆分为一个单独的对象(子类化UIView),然后在控制器对象然后符合的视图上实现协议和委托属性。

我只是对CS193p设计的实用性感到好奇,我可以理解,拆分视图更能代表MVC设计范例(特别是作为教学辅助工具),但对其在实际应用中的应用略有怀疑。

3 个答案:

答案 0 :(得分:4)

将“视图”视为UIButton和UIImageView等对象;可重用的组件,不一定了解您的应用程序的其余部分。视图控制器是负责配置视图对象和管理其状态的对象。

有些时候你想要UIView的子类,主要是当你需要在drawRect:中进行自定义绘图时。你不会将UIView子类化为自定义行为,这就是你的视图控制器的用途。例如,您不会将UITableView子类化,只是为了使表视图成为自己的委托。相反,您将视图控制器设置为表视图的委托。

答案 1 :(得分:2)

使用iOS,UIView类实现绘图刷新和触摸处理程序,而不是视图控制器类。如果你需要drawRect:或touchesBegan:等,你需要一个单独的UIView子类。

这部分原因可能是因为这就是按钮和标签本身的行为方式。他们重绘自己,并委托处理过的触摸。视图控制器不会绘制其内容并跟踪xy位置。

答案 2 :(得分:1)

这不是绝对必要的。如果您使用Interface Builder,那么您将构建自定义视图(打破业务代码中的UI设置代码)的大多数原因都得到了解决。但是,如果您想为视图构建自定义操作,或者设置一些您无法通过IB获得的属性,那么将视图拆分为单独的类是有意义的。