【问题标题】:Attaching gesture recognizers / action methods to views violate model view controller?将手势识别器/操作方法附加到视图违反模型视图控制器?
【发布时间】:2011-12-17 00:49:59
【问题描述】:

想问问大家对此的看法。我有一个 uiimageview 子类,在它的初始化程序中,我向 imageview 添加了一些手势识别器,并且我还在类中包含了手势识别器委托方法。我的问题是,这是否违反模型视图控制器?所有与控制视图有关的代码都应该在视图控制器中吗?与说一样,将按钮操作方法放在视图中。总之,有兴趣听听意见。

【问题讨论】:

  • 我喜欢这类问题。

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


【解决方案1】:

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

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


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

另一个例子,参见 UIViewController。它必须是一个控制器,但它与一个视图如此紧密地联系在一起,以至于问题仍然存在。视图和控制器之间的分离并不像 MVC 所希望的那样明确。


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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-21
        • 2015-06-26
        • 1970-01-01
        • 1970-01-01
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多