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

Posted

技术标签:

【中文标题】除了双击到 UITextView 之外的前向触摸【英文标题】:Forward touches other than double tap to UITextView 【发布时间】:2012-12-27 07:23:54 【问题描述】:

我有一个UITextView,除此之外我还有多个UIViewUIView 上的任何触摸动作都可以关联到对应的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];

我尝试了以下 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

UIView 中的touchBegan:withEvent: 转发UITouchUITextView 不会给出UITextView 的预期默认行为

还有其他解决方案可以解决这种情况吗?

提前致谢。

【问题讨论】:

【参考方案1】:

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

    让 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 中完成,因为手势识别器似乎经常被重置

【讨论】:

【参考方案2】:

子视图是不必要的,去掉它,替换:

[subview addGestureRecognizer:doubleTap];

与:

[textView addGestureRecognizer:doubleTap];

现在您应该在 tapDetected: 方法中获取您的事件。

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

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

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

【讨论】:

以上是关于除了双击到 UITextView 之外的前向触摸的主要内容,如果未能解决你的问题,请参考以下文章

如何将触摸从 UITextView 传递到 UITableViewCell

将 UITapGestureRecognizer 触摸传递到底层 UITableViewCell

如何获取 UItextview 触摸坐标位置

iOS 5 SDK UITextView 限制/错误?

动画后UITextView不响应触摸事件

将光标放在用户触摸的 UITextView 上