UIButton触摸事件贯穿到底层视图

我创build了一个包含两个UIButton的小UIView 。 该视图响应UITapGesture事件。 button应该回应TouchUpInside ,但是当我点击button时,响应者是底层视图,轻TouchUpInside手势select器被触发。 寻找build议或build议。

如何在视图层次结构中排列视图? 另外,你是在IB创build接口? 如果你连接正确,这应该不是一个问题…

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

 -(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,水龙头将被底层视图忽略。

正确的答案(防止tabrecognizer劫持任何水龙头,并不需要你实现委托等) 在这里find 。 我通过这个post得到了这个答案。

总之使用:

 tapRecognizer.cancelsTouchesInView = NO; 

“这样可以防止水龙头识别器成为唯一能够捕捉所有水龙头的水龙头”

这个devise的问题在于它类似于将一个buttonembedded另一个button。 虽然你可能有一个合理的理由去做,但你应该对事件stream更加小心。

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

看看这个问题。

的UIButton-内部-A-视图-即-具有-A-uitapgesturerecognizer

每个UIView都有一个“exclusiveTouch”属性。 如果它被设置为YES,那么视图将不会传递给响应者链。 尝试在您的UIButtons上设置此属性,看看是否有所作为。