2011-10-28 25 views
6

想要问这个人的意见。我有一个uiimageview子类,在它的初始化程序中,我为imageview添加了一些手势识别器,并且还在类中包含了手势识别器委托方法。我的问题是,这是否违反模型视图控制器?是否所有与控制视图有关的代码都在视图控制器中?与之相同,在视图中放置按钮操作方法。总之,有兴趣听取意见。将手势识别器/操作方法附加到视图违反了模型视图控制器?

+0

我喜欢这类问题。 – Morkrom

回答

5

从某种意义上说,是的,这违反了MVC模式。正如你所说,这个观点不应该与如何控制它有关,在应用程序的另一部分将这些代码分组是更好的习惯。

此外,OOP的最大优点之一是能够重用类。像这样的视图可以重用,没有任何问题,因为所有控制代码(特定于应用程序)都不在其中。 如果在视图中包含委托方法,则无法重用它,或者每次都必须更改委托方法!


但是规则是针对一般情况。查看适用于Mac OS X的Cocoa框架:您拥有可可绑定,它允许您直接更改视图内容以响应模型中的数据更改。这也以某种方式违反了MVC模式。

另一个示例,请参阅UIViewController。它必须是一个控制者,但它与问题持续存在的观点密切相关。视图&控制器之间的分隔并不像MVC想要的那样明确。


最后,我要说的是,这是一个好习惯,遵循的模式(只要它们符合你的需求),你可以按照它使用给定的框架的方式。但是有些情况下,如果你明确说明,那么创建一些捷径并打破规则可能会很有趣。

2

似乎是一个非常好的主意,如果行动只会影响视图的外观。例如,将平移手势识别器附加到视图以将其拖动,似乎是一个好主意。

但是,如果它会在您的应用程序中引发更广泛的影响,它可能不是正确的方法。

0

从Apple显影剂核心能力DOC(https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html):

视图目的是在一个应用程序,用户可以看到的对象。视图对象知道如何绘制自己并可以响应用户操作。

就我个人而言,我会解释这是为了表示在视图类中编写手势识别器,只要手势允许视图“响应用户操作”即可。

在Apple API中也有一些先例,我认为 - 因为一些UIView后代(例如UIButton)可以识别手势。

相关问题