我有一个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解决方案,
How to ignore touch events and pass them to another subview’s UIControl objects?
使用hitTest我无法捕获UITextView顶部的UIViews中的双击手势
Make UIGestureRecognizer to receive touches started on subviews
转发UITouch设置从touchBegan:withEvent:在UIView中转到UITextView没有给出UITextView的预期默认行为
是否有其他解决方案可用于解决此问题?
提前致谢.
最佳答案 这可以通过以下方式完成:
>让UITextView按照How to ignore touch events and pass them to another subview’s UIControl objects?中的建议处理触摸事件
>在UIView的hitTest中保存对其发生的视图的引用,以便以后可以使用它
>添加自定义双击手势识别器,检查hitTest引用是否为空,表示双击发生在目标视图上并将事件转发到该视图.如果没有,则手势识别器失败.要使手势识别器失败,您需要包含UIKit / UIGestureRecognizerSubclass.h并将state属性设置为UIGestureRecognizerStateFailed
>将手势识别器添加到UITextView
>扩展UITextView以覆盖gestureRecognizers getter并遍历手势识别器以要求自定义手势失败.这必须在getter中完成,因为手势识别器似乎经常被重置