UIView上的UITapGestureRecognizer和它的子视图在子视图被抽头时一起响应
UITapGestureRecognizer
应用于UIImageView
及其子视图( UITextView
)。 但是,当我点击子视图,接收器成为子视图和它的父视图(即UIImageView
+ UITextView
)。 它应该只是子视图,因为那是我挖掘的一个。 我假设嵌套的手势会首先作出反应,但显然父母接受拳头轻敲,然后去孩子。
所以,有各种不同的解决scheme(不是类似于我的,而是滚动视图冲突内的button)。 我怎样才能轻松解决我的问题,没有可能的子类和iOS 6 +支持? 我试着拖延UIImageView
上的UIGestureRecognizer
启动触摸,我试图设置cancelsTouchesInView
到NO
– 所有没有运气。
试试下面的代码:
使< 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委托方法,并在识别多个手势时将正确的策略应用于手势