UIWebView 上的 UIScrollView 和 UITapGestureRecognizer 冲突

Posted

技术标签:

【中文标题】UIWebView 上的 UIScrollView 和 UITapGestureRecognizer 冲突【英文标题】:UIScrollView on UIWebView and UITapGestureRecognizer conflicts 【发布时间】:2012-03-11 07:35:08 【问题描述】:

我在UIViewController 上有一个UITapGestureRecognizer,里面有一个UIScrollViewUIWebView。只有在我滚动UIWebView 后,它才能识别轻击手势。我怎么能防止这种情况?基本上,当我不滚动 Web 视图时,我希望检测到点击手势。我环顾四周,发现最接近的是:

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

但不确定如何在滚动时使用它来禁用点击。任何的想法?

我想做的另一件事是禁用 UITapGestureRecognizer,当单击 UIWebView 上的链接时(应该调用)。在调用 shouldStartLoadWebRequest 之前,我检查了是否调用了点击手势识别器。基本上,当单击 UIWebView 上的链接时,它不应触发由 UITapGestureRecongnizer 调用的操作。关于如何做到这一点的任何想法?

【问题讨论】:

您能否澄清一下您的视图结构:您的网页视图您的滚动视图中吗?还是它们彼此相邻? 是的,网页视图在滚动视图中。所以是 UIViewController 的 view > UIScrollView 里面有很多 UIWebView 可以水平滚动。 @xonegirlz 你解决了吗?我也有同样的问题 【参考方案1】:

所以 Apple 的文档 strongly recommends 你不会在滚动视图中嵌套 UIWebView

重要提示:您不应在 UIScrollView 对象中嵌入 UIWebView 或 UITableView 对象。如果这样做,可能会导致意外行为,因为这两个对象的触摸事件可能会混淆和错误处理。

ios 5 及更高版本上可以直接访问 UIWebView(使用 scrollView)属性上的底层滚动视图 - 玩弄这个可能对你有帮助。

【讨论】:

我没有将它直接嵌套在 UIScrollView 中。我有一个 UIViewController,然后里面是 UIWebView,是的,我能够获得 UIWebView 滚动视图,但这并没有帮助。我正在寻找你的一些想法,“玩 UIWebView 滚动视图”,因为我尝试了一堆东西,但没有成功

以上是关于UIWebView 上的 UIScrollView 和 UITapGestureRecognizer 冲突的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView里面的UIWebView上面的UIToolbar

UIScrollView 内的 UIWebView 并滚动到 Web 视图中的选定字段

iphone: UIwebview 卷曲效果

UIScrollView 上的 UITapGestureRecognizer

UIWebView 在 UIScrollView 内消耗触摸事件

UIScrollView 中的 UIImageView 和 UIWebView