UIButton触摸事件会进入底层视图

时间:2011-02-04 20:52:54

标签: iphone ios uibutton uigesturerecognizer

我创建了一个包含两个UIView的小UIButton。该视图会响应UITapGesture个事件。按钮应该响应TouchUpInside,但是当我点击按钮时,响应者是底层视图并且触发了轻击手势选择器。寻求建议或意见。

6 个答案:

答案 0 :(得分:4)

您可以在橙色视图中修改响应轻击手势的方法:

-(void) handleTapFrom:(UITapGestureRecognizer*) recognizer {
    CGPoint location = [recognizer locationInView:orangeView];
    UIView *hitView = [orangeView hitTest:location withEvent:nil];

    if ([hitView isKindOfClass:[UIButton class]]) {
        return;
    }

    //code that handle orange view tap
    ...
}

这样,如果您触摸UIButton,基础视图将忽略该点击。

答案 1 :(得分:2)

正确答案(阻止tabrecognizer劫持任何点击并且不需要您实现委托等)是found here。我通过this post得到了这个答案。

简而言之:

tapRecognizer.cancelsTouchesInView = NO;

“这会阻止点击识别器成为唯一能够识别所有人的人  抽头“

答案 2 :(得分:0)

每个UIView都有一个'exclusiveTouch'属性。如果将其设置为YES,则视图不会通过触摸响应链传递。尝试在UIButtons上设置此属性,看看是否有所不同。

答案 3 :(得分:0)

视图层次结构中的视图排序方式如何?另外,你在IB中创建界面吗?如果您正确连接连接,这根本不应该是一个问题......

答案 4 :(得分:0)

这种设计的问题在于它类似于将一个按钮嵌入到另一个按钮中。虽然您可能有充分理由这样做,但您应该对事件流程更加小心。

手势识别器在到达子视图之前拦截触摸(在您的情况下是两个按钮)会发生什么。您应该实现UIGestureRecognizerDelegate协议,即gestureRecognizer:shouldReceiveTouch:方法,如果触摸位于两个按钮中的任何一个内,则返回NO。这样可以防止橙色视图篡改用于按钮的触摸,按钮将按预期开始工作。

答案 5 :(得分:0)