在维护老项目开发过程中,子视图调用了
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
[super touchesBegan:touches withEvent:event];
发现点击子视图没有进入这个方法。
严谨的查了下父视图,发现父视图调用了
_tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapGesutre:)]
_tapGesture.delegate = self
[self.view addGestureRecognizer:_tapGesture]
基本上可以判断,手势已经触发,touch就不会触发。说白了就是手势响应优先级大于传递链,手势响应成功后,就取消了事件响应链传递。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
if ([NSStringFromClass([touch.view class]) isEqualToString:@"子视图名称"]) {
return NO;
return YES;
手势添加这个代码,来判断触发的是哪个视图,touch.view是子视图的,return NO就可以解决冲突。tip:这里也可以打个断点来看下touch.view是什么。