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