在超级视图中触摸开始时接收touchesMoved

时间:2012-07-31 08:09:45

标签: iphone ios cocoa-touch

在iOS中,我希望在子视图中收到touchesMoved个事件,即使在超级视图中触摸开始!理想情况下,当移动手指到达子视图时,我还希望收到touchesBegan

实现这一目标的最佳方法是什么? 我想我可以覆盖超级视图中的touchesMoved:withEvent:,进行点击测试,然后调用子视图,但是有更好的解决方案吗? (我试图在超级视图中辞职第一响应者,但这没有帮助)

1 个答案:

答案 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:方法。

埃里克