我创建了一个小的UIView
,其中包含两个UIButton
。该视图响应UITapGesture
事件。按钮应该响应TouchUpInside
,但是当我点击按钮时,响应器是底层视图,并且触发了tap手势选择器。寻求建议或建议。
我创建了一个小的UIView
,其中包含两个UIButton
。该视图响应UITapGesture
事件。按钮应该响应TouchUpInside
,但是当我点击按钮时,响应器是底层视图,并且触发了tap手势选择器。寻求建议或建议。
-(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,它的点击事件将被底层视图忽略。
视图在视图层次结构中的顺序是如何确定的?另外,您是在IB中创建界面吗?如果您正确地连接了这些连接,这将不会成为任何问题...
这种设计的问题在于它类似于将一个按钮嵌入到另一个按钮中。尽管你可能有合理的理由去做,但是你应该更加小心地处理事件流。
发生的情况是手势识别器在触及子视图(即你的两个按钮)之前拦截了它们。你应该实现UIGestureRecognizerDelegate协议,即gestureRecognizer:shouldReceiveTouch:
方法,并且如果触摸在任何一个按钮内部,就返回NO。这将防止橙色视图篡夺为按钮而打算的触摸,并使按钮开始按预期工作。