嵌入在 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 (SWIFT) 中的 UIImageView 的约束问题
带有嵌入式 UIWebView 的 UIScrollView 在按住后不滚动
有没有办法将 UIView 嵌入到 UIScrollview 中而不会丢失 iOS 中的子视图约束?
UIScrollview 中的 UIView 中的 UITableView :点击时 UITableView 数据被清除