iOS开发系列--UITouch与UITapGestureRecognizer的冲突

由于项目需求,在一个UIView中使用了富文本M80AttributedLabel控件,底层UIView上添加一个UITapGestureRecognizer单击事件,用于点击空白处收起键盘。
M80AttributedLabel中使用了一个Link跳转,控件内部使用的是UITouch来做处理的,刚开始调试发现怎么点都无法触发M80AttributedLabelLink跳转,后来对UITouch事件进行断点跟踪,发现

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

事件无法正确执行,而是在

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

事件中就中断了。
经过资料查询,最后发现是因为底层UIView加了UITapGestureRecognizer
而这个手势导致了touchesCancelled被触发从而使触摸失效。

解决办法:
1.通过设置UITapGestureRecognizercancelsTouchesInView属性。
cancelsTouchesInView的官方描述是“A Boolean value affecting whether touches are delivered to a view when a gesture is recognized.”也就是说,可以通过设置这个布尔值,来设置手势被识别时触摸事件是否被传送到视图。
当值为YES的时候,系统会识别手势,并取消触摸事件;为NO的时候,手势识别之后,系统将触发触摸事件。

gestureRecognizer.cancelsTouchesInView = NO;

2.移除底层UIViewUITapGestureRecognizer事件,添加一个UIButton,通过UIButtonUIControlEventTouchUpInside来实现同样的点击空白处收起键盘。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值