除了双击UITextView以外的其他正向触摸

The*_*ger 5 objective-c uitextview uiresponder uigesturerecognizer ios

我有一个UITextView对我有多重顶UIView。的任何触摸动作UIView都可以关联到相应的IBAction。在我的场景中,需要将双击手势与关联,除此以外UIViewIBAction任何其他触摸都需要转发给基础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];
Run Code Online (Sandbox Code Playgroud)

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

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

使用hitTest我无法捕获出现在UIViews中的双击手势 UITextView

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

转发UITouch从组touchBegan:withEvent:UIViewUITextView不给的预期违约行为UITextView

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

提前致谢。

Kri*_*hna 3

这可以通过以下方式完成:

  1. 让 UITextView 按照如何忽略触摸事件并将其传递给另一个子视图的 UIControl 对象? 中的建议处理触摸事件。
  2. 在 UIView 的 hitTest 中保存对发生它的视图的引用,以便以后使用
  3. 添加自定义双击手势识别器,检查 hitTest 引用是否不为空,表明双击发生在目标视图上,并将事件转发到该视图。如果不是,则手势识别器失败。要使手势识别器失败,您需要包含 UIKit/UIGestureRecognizerSubclass.h 并将状态属性设置为 UIGestureRecognizerStateFailed
  4. 将手势识别器添加到 UITextView
  5. 扩展UITextView以覆盖gestureRecognizers getter并循环遍历手势识别器以要求自定义手势失败。这必须在 getter 中完成,因为手势识别器似乎经常重置