在iOS中,我希望在子视图中收到touchesMoved
个事件,即使在超级视图中触摸开始!理想情况下,当移动手指到达子视图时,我还希望收到touchesBegan
。
实现这一目标的最佳方法是什么?
我想我可以覆盖超级视图中的touchesMoved:withEvent:
,进行点击测试,然后调用子视图,但是有更好的解决方案吗? (我试图在超级视图中辞职第一响应者,但这没有帮助)
答案 0 :(得分:0)
我今天必须解决这个完全相同的问题,而我刚刚做了。
说,你有以下内容 - 这是我的案例的抽象描述:
解决方案是覆盖-hitTest:withEvent:
方法。该方法的目的是返回应该处理触摸的视图。
您有两个选项:在子视图中覆盖它或在主视图中覆盖它。如果您希望子视图处理所有触摸,您可以让子视图上的-hitTest:withEvent
返回self
并完成它。在我的情况下,我仍然需要主视图上的按钮有自己的触摸检测,所以我的修复是覆盖主视图上的-hitTest:withEvent:
方法,如下所示:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (CGRectContainsPoint(self.myButton.frame, point))
{
return self.myButton;
}
else
{
return self.mySubView;
}
}
这就像一个绝对的魅力!希望这也适合你: - )
您当然应该修改-hitTest:withEvent:
中的详细信息以满足您的特定需求 - 也许您希望将此覆盖限制为特定区域或特定控件集 - 但重点是答案这个主题的主要问题在于覆盖了这个-hitTest:withEvent:
方法。
埃里克