在 iOS 中禁用 uiwebview 上的某些触摸事件
Posted
技术标签:
【中文标题】在 iOS 中禁用 uiwebview 上的某些触摸事件【英文标题】:Disable certain touch events on uiwebview in iOS 【发布时间】:2013-11-16 23:10:35 【问题描述】:我的应用程序通过驻留在我的网络服务器上的网页使用交互式展厅平面图。我有一个UITableView
,列出了所有参展商,选择参展商会将用户带到UIWebView
,参展商展位在交互式平面图上突出显示。在大多数情况下,用户必须进行放大手势才能在 web 视图中查看详细的参展商展位信息。但是,由于它们是平面图上的其他交互式热点,用户可能会在触摸屏幕放大时无意中选择另一个展位。我想禁用用户选择任何其他展位(触摸事件)的能力,但想保留这样用户仍然可以使用放大手势。基本上,此时我想将页面呈现为“静态”,以便突出显示的展位保持突出显示,用户无法选择任何其他热点,但仍可以平移和放大页面。
【问题讨论】:
如果您只想禁用 链接以防止加载另一个页面,您可以使用 UIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType: 方法并返回 NO。如果您的页面包含一些其他交互功能而无需重新加载页面,您应该尝试找到一种方法来使用 javascript 禁用所有链接。 交互式楼层地图通过供应商的网络服务嵌入网页中,热点通过javascript完成,不是链接。如果通过桌面浏览器查看页面,用户只需将鼠标悬停在热点上以突出显示它并查看有关它的信息。由于移动设备中没有鼠标悬停,因此通过触摸可以实现相同的效果。这就是为什么我只想禁用点击/触摸功能而不是手势功能,以便用户仍然可以根据需要进行平移和放大。 【参考方案1】:UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
if (//link is something you want to ignore)
return NO;
return YES;
【讨论】:
这对我的问题不起作用,因为热点实际上是通过 javascript 鼠标悬停而不是从 URL 方案呈现的。因此,当我将上面的代码与 if(([ requestURL scheme ] isEqualToString: @"http" ]) && (navigationType == UIWebViewNavigationTypeLinkClicked)) 一起使用时,它没有帮助,仍然可以点击热点。以上是关于在 iOS 中禁用 uiwebview 上的某些触摸事件的主要内容,如果未能解决你的问题,请参考以下文章
UIWebView canPerformAction 不禁用某些菜单项