UIButton触摸事件落入底层视图
我创建了一个包含两个UIButton
s的小型UIView
。该视图响应UITapGesture
事件。按钮应该会响应TouchUpInside
,但是当我点击按钮时,响应者是底层视图,轻击手势选择器被触发。寻找建议或建议。UIButton触摸事件落入底层视图
每个UIView都有一个'exclusiveTouch'属性。如果它被设置为YES,则该视图不会将响应传递给响应者链。尝试在你的UIButtons上设置这个属性,看看这是否有所作为。
我会给这个镜头。 – Kyle 2011-03-04 15:37:02
这个设计的问题是,它类似于将一个按钮嵌入到另一个按钮。虽然您可能有合理的理由去做,但您应该更加注意事件流程。
在手势识别器到达子视图(您的案例中的两个按钮)之前,手势识别器会拦截触摸。您应该实现UIGestureRecognizerDelegate协议,即gestureRecognizer:shouldReceiveTouch:
方法,如果触摸位于两个按钮中的任何一个中,则返回NO。这将防止橙色视图篡改旨在用于按钮的触摸,并且按钮将按预期开始工作。
我想到了这一点,但即使动画(按钮上的蓝色闪光)显示按钮响应,对触摸作出响应的视图仍是底层视图。 – Kyle 2011-02-05 19:30:29
可以修改响应橙色视图点击手势的方法:
-(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和不需要你实现一个委托等)是found here。我通过this post得到了这个答案。
总之使用:
tapRecognizer.cancelsTouchesInView = NO;
“防止水龙头识别要抓住所有的 水龙头只有一个”
我已经结束了什么做的是交易的UIButtons UIViews也有一个附加的轻拍手势识别器。这似乎按照我期望按钮的行为方式工作。 – Kyle 2011-02-07 16:14:06