【问题标题】:Handling touch event logic in Subview or ViewController在 Subview 或 ViewController 中处理触摸事件逻辑
【发布时间】:2010-08-30 17:08:30
【问题描述】:
我有一系列作为子视图添加的 UIView 子类。每个子视图都可以拖放。当它们被删除时(touchesEnded),我需要在 viewController 中运行一个方法来做一些工作。我目前在每个子视图类中处理了 touchEvents。我应该在 viewController 中处理这些触摸事件,还是应该将指向父 viewController 的指针作为我添加为子视图的每个类的属性传递?
更新:或者这是 NotificationCenter 的工作?
【问题讨论】:
标签:
objective-c
cocoa-touch
uikit
uiviewcontroller
【解决方案1】:
UIViewController 是 UIResponder 的子类,实例会自动插入到它们控制的视图后面的响应者链中。因此,您可以在 UIViewController 的子类中实现与在 UIView 的子类中相同的事件方法,并且它们将“正常工作”;也就是说,它们会被自动调用。
因此,如果您的视图控制器需要响应-touchesEnded:withEvent:,只需在您的 UIViewController 子类中直接实现该方法即可。如果视图还需要对事件做出响应,您可以随时从 -touchesEnded:withEvent:(或其他)实现中向其发送消息。
【解决方案2】:
您可以尝试使用委托协议将所需的触摸处理事件从您的 uiview 子类委托给 uiviewcontroller。视图控制器可以在实例化或添加每个子视图时将自己设置为委托。
在 MVC 范例中,如果您想处理特定于 V 视图内部的触摸(按钮外观/位置),那么您可能希望在 V 视图中处理该触摸,但如果触摸影响了 V 视图之外的某些状态视图(它在更大的窗口中的位置等)您可能希望将触摸处理传递给 C 控制器以在 M 模型中设置状态。