iOS开发中让子视图不响应父视图的手势识别器

本文介绍如何在iOS开发中解决子视图点击时触发父视图手势识别器的问题。通过使用UIGestureRecognizerDelegate的代理方法-(BOOL)gestureRecognizer:shouldReceiveTouch:,可以有效地屏蔽子视图上的tap手势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.问题描述

给父视图上添加一个子视图,给父视图添加一个手势识别器UITapGestureRecognizer,点击子视图时,也会触发UITapGestureRecognizer所关联的事件

代码:

 UIView *blackV = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HIGHT)];
    blackV.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.7];
    self.blackV = blackV;
    
    [self.view addSubview:blackV];
    
    DeviceListView *listV = [[DeviceListView alloc]initWithFrame:CGRectZero];
    listV.deviceDelegate = self;
    [blackV addSubview:listV];
    [listV mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.right.bottom.equalTo(blackV);
        make.height.offset(200);
    }];
    self.listV = listV;
    
    UITapGestureRecognizer *singleFingerOne = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleFingerEvent)];
    singleFingerOne.numberOfTouchesRequired = 1; //手指数
    singleFingerOne.numberOfTapsRequired = 1; //tap次数
    singleFingerOne.delegate = self;
    [blackV addGestureRecognizer:singleFingerOne];

二.解决方法

使用UIGestureRecognizerDelegate的代理方法-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch,将子视图的tap手势屏蔽

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

    if ([touch.view isDescendantOfView:self.listV]) {
        return NO;
    }
    
    return YES;
    
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值