程序员

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

2018-02-27  本文已影响0人  攻城狮V
  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的手势添加代理):

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;//继续往下执行
    
    
}
-(void)tapGestureRead:(UITapGestureRecognizer *)sender{
         [self.alertBac removeFromSuperview];
   
}
上一篇下一篇

猜你喜欢

热点阅读