Objective c 向前触摸而不是双击UITextView

Objective c 向前触摸而不是双击UITextView,objective-c,ios,uitextview,uigesturerecognizer,uiresponder,Objective C,Ios,Uitextview,Uigesturerecognizer,Uiresponder,我有一个UITextView,除此之外,我还有多个UIView。ui视图上的任何触摸动作都可以关联到相应的i动作。在我的场景中,双击手势需要关联到UIView的iAction,除此之外的任何其他触摸都需要转发到底层的UITextView 执行上述场景的代码块 UITextView *textView = [[UITextView alloc] init]; UIView *subview = [[UIView alloc] init]; UITapGestureRecognizer *dou

我有一个
UITextView
,除此之外,我还有多个
UIView
ui视图
上的任何触摸动作都可以关联到相应的
i动作
。在我的场景中,双击手势需要关联到
UIView
iAction
,除此之外的任何其他触摸都需要转发到底层的
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];
我尝试了以下解决方案

使用hitTest,我无法在UIView中捕获双击手势,该手势位于
UITextView

UITextView
中的
uitextTouch
设置从
touchBegind:withEvent:
转发到
UITextView
不会给出预期的默认行为
UITextView

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


提前感谢。

子视图是不必要的,请将其删除,然后更换:

[subview addGestureRecognizer:doubleTap];
与:

现在,您应该在tapDetected:method中获取事件

要确保未更改UITextView行为,请使用以下方法:

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


这可以通过以下方式实现:

  • 让UITextView按照中的建议处理触摸事件
  • 在UIView的hitTest中,保存对该视图的引用,以便以后使用
  • 添加自定义双击手势识别器,该识别器检查hitTest引用是否为空,指示双击发生在目标视图上,并将事件转发到该视图。否则,使手势识别器失败。要使手势识别器失败,您需要包含UIKit/UIgestureRecognitizerSubclass.h并将state属性设置为UIgestureRecognitizerStateFailed
  • 将手势识别器添加到UITextView
  • 扩展UITextView以覆盖手势识别器getter,并通过手势识别器循环以要求自定义手势失败。这必须在getter中完成,因为手势识别器似乎经常被重置
  • - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
    
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch