除了双击UITextView之外的前向触摸

时间:2012-12-27 07:23:55

标签: objective-c ios uitextview uigesturerecognizer uiresponder

我有一个UITextView,我有多个UIViewUIView上的任何触摸操作都可以与相应的IBAction相关联。在我的方案中,需要将双击手势与UIView的{​​{1}}相关联,除此之外的任何其他触摸都需要转发到基础IBAction

执行上述方案的代码块

UITextView

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

How to ignore touch events and pass them to another subview's UIControl objects?

使用hitTest我无法在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];

之上的UIViews中捕捉双击手势

Make UIGestureRecognizer to receive touches started on subviews

UITextView UITouch touchBegan:withEvent:转发UIView未设置UITextView的预期默认行为

是否有其他解决方案可用于解决此问题?

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

  1. 让UITextView按照How to ignore touch events and pass them to another subview's UIControl objects?
  2. 中的建议处理触摸事件
  3. 在UIView的hitTest中保存对其发生的视图的引用,以便以后可以使用
  4. 添加自定义双击手势识别器,检查hitTest引用是否为空,表示双击发生在目标视图上并将事件转发到该视图。如果没有,则手势识别器失败。要使手势识别器失败,您需要包含UIKit / UIGestureRecognizerSubclass.h并将state属性设置为UIGestureRecognizerStateFailed
  5. 将手势识别器添加到UITextView
  6. 扩展UITextView以覆盖gestureRecognizers getter并遍历手势识别器以要求自定义手势失败。这必须在getter中完成,因为手势识别器似乎经常被重置

答案 1 :(得分:0)

子视图是不必要的,删除它,并替换:

[subview addGestureRecognizer:doubleTap];

使用:

[textView addGestureRecognizer:doubleTap];

现在你应该在tapDetected:method中获取你的事件。

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

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

OR

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