以下UIResponder
方法会在屏幕上报告原始触摸:
- touchesBegan:withEvent:
- touchesMoved:withEvent:
- touchesEnded:withEvent:
最近,我正在玩一个UIView
子类,我想要触摸响应。
最初,我在UIViewController
中实施了上述方法,负责查看相关视图。
然而,我意识到每当触摸UIViewControllers视图时都会调用触摸方法,而不是我想要的子视图。
我重新实现了UIView子类中的方法,一切都按预期工作。
但是我觉得这违反了MVC。我的观点中有控制逻辑。
我应该保持在UIViewController中实现的方法,并以某种方式命中测试来解释触摸了哪个视图,或者我是否正确在UIView子类中实现了这些方法? /强>
我觉得后来是懒惰的出路。
感谢您的时间。
答案 0 :(得分:1)
在MVC中,视图负责用户交互。因此,在UIView中覆盖UIResponder方法更有意义。为了严格遵守MVC,您应该使用delegate pattern(或其他一些模式)来调用控制器中的控制逻辑功能。
上图来自(Apple's MVC documentation)。与您的问题相关的部分位于左上角。视图应该告诉控制器它已被触摸,控制器应该执行逻辑。
UIViewController只能实现这些方法,因为它带有内置视图。这很令人困惑,因为它意味着UIViewController本身违反了MVC,但这是一个更复杂的讨论。