如何在UIWebView中实现触摸事件?

3
我尝试了这个网站和其他网站提供的各种解决方案来实现在UIWebView上的触摸事件,但是我仍然无法做到这一点。实际上,我创建了一款文章阅读应用程序。在普通UIView上添加了一个UIWebView。现在,我想跟踪特定Web视图上的某些用户触摸事件。 当我在普通视图上执行此操作时,它完美地工作。但是如果我尝试在Web视图上执行它,则停止工作。 我之前尝试过的解决方案是: 1. 实现触摸方法,如touchbegan、touchended、touchmoved、touchcancelled 2. 实现UIGestureRecognizer 3. 实现窗口触摸事件,如发送事件
如果有人可以帮助我或告诉我我做错了什么或有新的解决方案(除此之外),那么我将不胜感激。
2个回答

2

在UIWebView上放置一个透明的UIVIew来捕获触摸事件。然后您可以对其进行操作,或者使用touchesBegan委托方法将其可选地传递到UIWebView中。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.myUIWebView touchesBegan:touches withEvent:event];
}

请查看此前的帖子以获取详细信息:iOS - 将所有触摸事件传递到视图


但是我的UIWebView包含滚动。你不觉得如果我这样做,它的滚动会被阻止吗? - Sanchit Paurush
我尝试了你的解决方案,但问题是运行时警告出现了,即无法恢复先前选择的帧。 - Sanchit Paurush

0

我对UIWebView进行了子类化并“吸附”到其深度为2的子视图中的手势识别器上(你可以递归执行,但这对于iOS6-7已经足够了)。 然后,您可以随心所欲地使用触摸位置和手势识别器状态。

for (UIView* view in self.subviews) {
    for (UIGestureRecognizer* recognizer in view.gestureRecognizers) {
        [recognizer addTarget:self action:@selector(touchEvent:)];
    }
    for (UIView* sview in view.subviews) {
        for (UIGestureRecognizer* recognizer in sview.gestureRecognizers) {
            [recognizer addTarget:self action:@selector(touchEvent:)];
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接