如何让子view 不受父view 手势事件的影响

  1. superView 添加了点击手势事件,这个时候subView 往往也默认携带了superView的点击手势事件,如果要在点击subView的时候,不受绑定事件的影响,可用如下方法:
 -(void)tapGestureRead:(UITapGestureRecognizer *)sender
{

    if( CGRectContainsPoint([sender.view viewWithTag:100].frame, [sender locationInView:self.alertBac])) {
//判断点击的地方是否在subView上,其中 [sender.view viewWithTag:100].frame 即使subView的frame 。[sender locationInView:self.alertBac]是点击的范围

        NSLog(@"subView被点击");

    }
    else{

        [self.alertBac removeFromSuperview];

    };

}

注意:以上的方法有可能把subView的点击事件也给屏蔽了

如果subView也有点击事件要处理,又不想被屏蔽,可以采用以下方法 (给superView的手势添加代理):

  • 先在viewcontroller 添加代理<UIGestureRecognizerDelegate>
UITapGestureRecognizer *tagGestureRead = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRead:)];
    tagGestureRead.delegate = self;
    [self.alertBac addGestureRecognizer:tagGestureRead];
  • 然后实现代理方法,并在代理方法里进行区分判断
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
 
    // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;//禁止被绑定的方法冲突
    }
    return  YES;//继续往下执行
    
    
}
  • 代码优先执行上面的代理方法,然后决定是否执行以下的绑定的手势方法。 这样就不会冲突掉subView上的点击事件了
-(void)tapGestureRead:(UITapGestureRecognizer *)sender{
         [self.alertBac removeFromSuperview];
   
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容