UITapGestureRecognizer
适用于UIImageView
及其子视图(UITextView
)。但是,当我点击子视图时,接收器变为子视图及其父视图(即UIImageView
+ UITextView
)。但它应该只是子视图,因为那是我点击的那个。我假设嵌套手势会先做出反应,但显然父母接受了第一次敲击然后它会转到孩子身上。
因此,对于各种场景有不同的解决方案(与我的不同,而是滚动视图内的按钮冲突)。如何在没有可能的子类化和iOS 6+支持的情况下轻松解决我的问题?我尝试在UIGestureRecognizer
上推迟UIImageView
上的触摸,我尝试将cancelsTouchesInView
设置为NO
- 所有这些都没有运气。
答案 0 :(得分:10)
请尝试以下代码:
符合< 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;
}
}
希望它能解决您的问题。享受编码.. !!!!
答案 1 :(得分:3)
这正是它应该做的。 视图层次结构类似于树结构,并且在触摸手势期间从根节点开始遍历。您的父视图很可能首先接收手势然后接收其子视图。遍历跳过了
的节点userInteractionEnabled = NO。
因为,你没有任何代码我无法帮你玩这个标志。更通用的解决方案是始终仅为您的parentView设置手势,并且在手势委托中检查坐标是否属于任何一个子视图,如果是,则调用您的子视图的手势方法。 不是一个干净的方法,但有效。 !!
答案 2 :(得分:0)
当识别出多个手势时,您应该实现UIGestureRecognizer委托方法并将正确的策略应用于手势