除了双击之外,如何将触摸事件转发到UITextView?

5
我有一个UITextView,上面有多个UIView。任何对UIView的触摸操作都可以与相应的IBAction相关联。在我的情况下,双击手势需要与UIView的IBAction相关联,除此之外的任何其他触摸都需要转发到底层的UITextView。
我执行上述场景的代码块。
UITextView *textView = [[UITextView alloc] init];

UIView *subview = [[UIView alloc] init];

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected:)];
doubleTap.numberOfTapsRequired = 2;
[subview addGestureRecognizer:doubleTap];

[textView addSubview: subview];

我尝试了以下的SO解决方案,

如何忽略触摸事件并将其传递给另一个子视图的UIControl对象?

使用hitTest无法在UIView上捕获双击手势,该UIView位于UITextView上方。

使UIGestureRecognizer接收在子视图上开始的触摸

UIView中的touchBegan:withEvent:转发UITouch集到UITextView不会给出UITextView的预期默认行为。

是否有其他解决此情况的解决方案?

提前感谢。

2个回答

3

以下是实现的方法:

  1. 按照如何忽略触摸事件并将其传递到其他子视图的UIControl对象?建议,让UITextView处理触摸事件。
  2. 在UIView的hitTest中保存所发生事件的视图的引用,以便以后使用。
  3. 添加自定义双击手势识别器,检查hitTest引用是否不为空,指示双击发生在目标视图上,并将事件转发到该视图。如果没有,失败手势识别器。要使手势识别器失败,您需要包含UIKit /UIGestureRecognizerSubclass.h,并将state属性设置为UIGestureRecognizerStateFailed。
  4. 将手势识别器添加到UITextView中。
  5. 扩展UITextView来覆盖gestureRecognizers getter并循环遍历手势识别器,要求自定义手势失败。由于gestureRecognizers似乎经常被重置,因此必须在getter中执行此操作。

0

子视图是不必要的,请将其删除,并替换为:

[subview addGestureRecognizer:doubleTap];

使用:

[textView addGestureRecognizer:doubleTap];

现在你应该在tapDetected:方法中收到你的事件。

为了确保你不改变UITextView的行为,请使用以下方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

或者

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接