将手势识别器/操作方法附加到视图会违反模型视图控制器吗?

时间:2011-10-28 04:41:04

标签: iphone objective-c ios cocoa-touch model-view-controller

想要问人们对此的意见。我有一个uiimageview子类,在它的初始化器中我向imageview添加了一些手势识别器,我还在课堂中包含了手势识别器委托方法。我的问题是,这是否违反了模型视图控制器?是否所有与控制视图有关的代码都在视图控制器中?与此相同,在视图中放置按钮操作方法。无论如何,有兴趣听取意见。

3 个答案:

答案 0 :(得分:5)

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

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


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

另一个例子,请参阅UIViewController。它必须是一个控制器,但它与视图紧密相连,问题仍然存在。视图与视图之间的分离控制器不像MVC那样明确。


总而言之,我会说遵循模式(只要符合您的需求)和使用给定框架遵循模式的方式是一个好习惯。但是有一些情况,如果你明确说明,创建一些捷径并打破规则可能会很有趣。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

来自Apple开发人员核心能力文档(https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html):

  

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

我个人认为这意味着可以在视图类中编写手势识别器,只要手势是允许视图“响应用户操作”。

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