Closed wfkbyni closed 8 years ago
为什么要加这么多叹号。。。。
可以检查下 Label 或 TextView 的触摸事件是否被禁用了、是否有其它手势(尤其是 TapGesture)阻碍了触摸流程。
在UIScrollView中使用YYLabel,触摸事件很容易走到
而非预期的- (void)touchesEnded:(NSSet )touches withEvent:(UIEvent )event 去触发tapAction,为何这样?
注意 UIScrollView 的 delaysContentTouches 和 canCancelContentTouches 这两个属性。
这两个属性,调整之后,对上述问题,没有影响。
YYLabel 是继承自 UIView,然后重写了 UIResponder 的 touchesBegan
touchesMoved
touchesEnded
和 touchesCancelled
这四个方法来监听触摸事件的。这里没有做其他多余的处理,所以可以很容易验证触摸事件响应顺序。
UIScrollView 自带一个 PanGesture,而这个 Gesture 会优先拦截触摸事件,并在识别到 Pan 动作时取消掉其他触摸流程,这时 YYLabel 就会走到 touchesCancelled
去了。如果设置一下 UIScrollView 的属性,delaysContentTouches = YES, canCancelContentTouches = NO 这样就不会进入touchesCancelled
了,但这会产生一些副作用(手指落到 Label 后不动,0.5 秒后再滑动就没效果了)。
如果你测试这两个属性不起作用,看看整个视图层级中是否还有其他 Gesture 或触摸拦截操作(比如 TableView/Cell 由苹果内嵌的一些自定义 Gesture 也会有影响)。
// 1. 创建一个属性文本 NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"Some Text, blabla..."];
text的tapAction不会被触发!!!!