现在很多时候我们都需要通过给view添加UITapGestureRecognizer来实现交互,但是如果在这个view上添加了子view也会自动继承手势,如果我们不希望子view继承父view的事件响应这时候就需要通过UITapGestureRecognizer的代理方法来实现了。
首先我们用代码创建一个view并且给它添加一个手势
UIView *firstView = [[UIView alloc] init];
firstView.userInteractionEnabled = YES;
[self.view addSubview:firstView];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(TapAction)];
//记得添加代理
tap.delegate = self;
[firstView addGestureRecognizer:tap];
在firstView上再次添加一个view,叫做secondView好了
UIView * secondView = [[UIView alloc] init];
secondView.userInteractionEnabled = YES;
[firstView addSubview: secondView];
然后在interface中声明代理
<UIGestureRecognizerDelegate>
实现其代理方法
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
if ([touch.view isDescendantOfView: secondView]) {
return NO;
}
return YES;
}
根据这个方法名我们即可知道这个代理方法用于判断子view是否应该继承响应,如果是secondView则不继承响应,这样我们点击子view便不会响应父view的事件了。
网友评论