UIView上的UITapGestureRecognizer和它的子视图在子视图被抽头时一起响应

UITapGestureRecognizer应用于UIImageView及其子视图( UITextView )。 但是,当我点击子视图,接收器成为子视图和它的父视图(即UIImageView + UITextView )。 它应该只是子视图,因为那是我挖掘的一个。 我假设嵌套的手势会首先作出反应,但显然父母接受拳头轻敲,然后去孩子。

所以,有各种不同的解决scheme(不是类似于我的,而是滚动视图冲突内的button)。 我怎样才能轻松解决我的问题,没有可能的子类和iOS 6 +支持? 我试着拖延UIImageView上的UIGestureRecognizer启动触摸,我试图设置cancelsTouchesInViewNO – 所有没有运气。

试试下面的代码:

使< UIGestureRecognizerDelegate >符合你的类。

设置yourGesture.delegate = self ;

然后添加这个委托方法:

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { // return YES (the default) to allow the gesture recognizer to examine the touch object, NO to prevent the gesture recognizer from seeing this touch object. if([touch.view isKindOfClass: [UITextView class]] == YES)] { return YES; } else { return NO; } } 

希望它能解决你的问题。 享受编码.. !!!!

这正是它应该做的。 视图层次结构就像一个树结构,它在触摸手势过程中的遍历从根节点开始。 您的父视图很可能首先接收手势,然后接收其子视图。 遍历跳过了其中的节点

userInteractionEnabled = NO。

因为,你没有任何代码,我不能帮你玩这个标志。 更一般的解决scheme是总是只为你的父视图设置手势,在手势代表检查坐标,如果它属于任何一个子视图,如果是的话,然后调用你的子视图的手势方法。 不是一个干净的方法,但工程。 !

您应该实现UIGestureRecognizer委托方法,并在识别多个手势时将正确的策略应用于手势