嵌入在 UIScrollview 中的 UIWebview 中的 Javascript 触摸事件

Posted

技术标签:

【中文标题】嵌入在 UIScrollview 中的 UIWebview 中的 Javascript 触摸事件【英文标题】:Javascript touch events in a UIWebview that is embedded in a UIScrollview 【发布时间】:2011-02-18 14:25:05 【问题描述】:

当 UIWebview 嵌入到 UIScrollview 中时,我对 UIWebview 中的 javascript 和触摸事件有疑问。

UIScrollview 有许多并排的视图(为简单起见,我将它们称为“子视图”)。每个子视图都是 iPad 屏幕的大小,向左/向右滑动应该在下一个/上一个子视图上移动。其中一个子视图是 UIWebview,我在其中运行一个小型 javascript 应用程序,该应用程序使用触摸事件,在某些情况下还使用 iScroll 组件。

不幸的是,UIWebview 嵌入在 UIScrollview 中的事实(苹果不推荐这种做法:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWebView_Class/Reference/Reference.html - 请参阅标有“重要”的框)。

我遇到的问题是在 UIWebview 子视图中滑动时的触摸事件。 例如,如果我加载谷歌主页,则滑动工作正常,下一个子视图将进入视图。但是,当我加载其中一个 JS 应用程序时,滑动不起作用。

我假设 UIWebview 组件获取触摸事件并将它们传递给其中的 Javascript,以便它可以做出相应的响应。然后它还会将它们传播回 UIScrollview 吗?还是由 Javascript 代码来确保它不会在事件中“停止传播”?非常感谢任何有关这些事件如何协调的信息。

最后,我不是 javascript 程序员和 Objective-c 程序员,虽然我了解它的基础知识,即我已经浏览了一些斯坦福 iTunes iOS 系列的 Objective-C 视频并编写了一些演示,但就是这样。

非常感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

失败的页面是否比UIWebView 宽?如果您将scalesPageToFit 属性设置为YES 并禁用UIWebView 使用的内部UIScrollView 上的反弹,那么应该可以解决问题。

您可以使用以下方法禁用反弹:

for (UIView *view in webView.subviews) 
    if (![[view class] isSubclassOfClass:[UIScrollView class]]) continue;
    ((UIScrollView *)view).bounces = NO;
    break;

但不能保证 App Store 的批准,因为我只将它用于未通过 App Store 分发的应用程序。

【讨论】:

以上是关于嵌入在 UIScrollview 中的 UIWebview 中的 Javascript 触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

从嵌入在 UIScrollView 中的表中推送视图控制器

嵌入在 UIScrollView (SWIFT) 中的 UIImageView 的约束问题

带有嵌入式 UIWebView 的 UIScrollView 在按住后不滚动

有没有办法将 UIView 嵌入到 UIScrollview 中而不会丢失 iOS 中的子视图约束?

UIScrollview 中的 UIView 中的 UITableView :点击时 UITableView 数据被清除

Swift 3:滚动视图中的 UIPickerView