有一个名为viewA的UIView,viewA有一个UITapGestureRecognizer,我无法修改识别器的目标代码。
而viewA有很多子视图。对于某些特定的子视图,我希望他们在触摸它们时不会向viewA发送tap事件(对于其他子视图,它们应该向viewA提供tap事件)。我该怎么办?
答案 0 :(得分:1)
为这些子视图添加另一个UITapGestureRecognizer,因此点击将不会传递给超级视图。
答案 1 :(得分:1)
将viewA设置为识别器的委托。然后使用委托方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
检查触摸是否在不需要的子视图中:
for(UIView *v in unwantedSubviewsArray){
CGPoint touchLocation = [touch locationInView:v];
if (CGRectContainsPoint(v.frame, touchLocation)){
return NO;
}
}
return YES;
答案 2 :(得分:0)
您可以拥有一个包含您希望避免对触摸做出反应的视图的数组:
NSArray <UIView *> *untouchableSubviews; //will contain the views you don't want to touch
并覆盖容器视图中的hitTest(在您的情况下为viewA)
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
UIView *view = [super hitTest:point withEvent:event];
if ([_untouchableViews containsObject:view]) {
return nil; //this view will pass touch events to his superview
}
else{
return view; //this view will handle touch events itself
}
}