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

Does implementing UIResponder touch methods inside a UIView subclass violate MVC?

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

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

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

最初我在负责相关视图的 UIViewController 中实现了上述方法。

但是,我意识到只要触摸 UIViewControllers 视图,就会调用触摸方法,而不是我想要的子视图。

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

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

我是否应该保留在 UIViewController 中实现的方法,并以某种方式点击测试 来解释触摸了哪个视图,或者我是否正确地使用了这些方法在 UIView 子类中实现?

我觉得后者是偷懒的出路。

感谢您的宝贵时间。

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

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

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