在UIView子类中实现UIResponder触摸方法是否会违反MVC?

时间:2016-07-29 15:33:03

标签: ios iphone uiview uikit uiresponder

以下UIResponder方法会在屏幕上报告原始触摸:

- touchesBegan:withEvent:
- touchesMoved:withEvent:
- touchesEnded:withEvent:

最近,我正在玩一个UIView子类,我想要触摸响应。

最初,我在UIViewController中实施了上述方法,负责查看相关视图。

然而,我意识到每当触摸UIViewControllers视图时都会调用触摸方法,而不是我想要的子视图。

我重新实现了UIView子类中的方法,一切都按预期工作。

但是我觉得这违反了MVC。我的观点中有控制逻辑。

我应该保持在UIViewController中实现的方法,并以某种方式命中测试来解释触摸了哪个视图,或者我是否正确在UIView子类中实现了这些方法? /强>

我觉得后来是懒惰的出路。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

在MVC中,视图负责用户交互。因此,在UIView中覆盖UIResponder方法更有意义。为了严格遵守MVC,您应该使用delegate pattern(或其他一些模式)来调用控制器中的控制逻辑功能。

enter image description here

上图来自(Apple's MVC documentation)。与您的问题相关的部分位于左上角。视图应该告诉控制器它已被触摸,控制器应该执行逻辑。

UIViewController只能实现这些方法,因为它带有内置视图。这很令人困惑,因为它意味着UIViewController本身违反了MVC,但这是一个更复杂的讨论。