在 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,但这是一个更复杂的讨论。
以下 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,但这是一个更复杂的讨论。