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

1、项目需求:

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

比如:父视图是一个自定义的UIView A ,子视图是一个UITextView B。

此时给父视图 A 绑定一个长按操作。但是,子视图 B本身就会有长按选中的手势。

如果,在子视图B中长按,也会触发父视图 A的自定义长按事件。这样就造成 B的长按选中失效。

所以,目标是让父视图A的长按事件不干扰子视图B的长按事件。

2、思路分析

设置手势代理 + 实现方法

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

3、示例代码(思路)

1、遵守手势代理协议

<UIGestureRecognizerDelegate>

2、

YYTextView *edittingArea = [[YYTextView alloc] initWithFrame:CGRectMake(8, 0, kScreenSize.width - 16, edittingAreaHeight)];
_edittingArea = edittingArea;
_edittingArea.placeholderText = @"请输入评论?";
_edittingArea.placeholderFont = [UIFont systemFontOfSize:16];
[_collectionView addSubView:_edittingArea];

//父视图长按手势
UILongPressGestureRecognizer *longPressGR = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(moveClick:)];
//设置当前控制器,是手势事件的代理
longPressGR.delegate = self;
[_collectionView addGestureRecognizer:longPressGR];

3、代理方法实现:

// 父视图UICollectionView 的长按事件。编辑框不可接受。以此保证,可以正常的长按选中文本。
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
//如果是子视图 self.edittingArea ,设置无法接受 父视图_collectionView 的长按事件。
if ([touch.view isDescendantOfView:self.edittingArea]) {
return NO;
}
return YES;
}

参考链接:

子视图不响应父视图的手势识别器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容