您可以尝试将 javascript 注入 webView。此代码也适用于 iPhone,但仅在页面完全加载时才有效。
http://www.javascriptsource.com/page-details/disable-text-selection.html或
http://solidlystated.com/scripting/proper-way-to-disable-text-selection-and-highlighting/
要让它在页面仅加载一半或仍在加载时正常工作,您可能必须使用与此类似的设置,在该设置中注入禁用 javascript,就像它开始选择一样。
http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/
我能想到的最后一件事可能会起作用,您是否测试过将选择器 @selector(select:) 添加到禁用选择器列表中?
编辑:好的,当你显示 PDF 而不是 html 页面时,你可以试试这个。
设置
将 webView 放在一个 scrollView 中;
将 ScrollView 的:委托设置为 self;最小缩放到 1.0,最大缩放到任何你想要的;
在 weView 完成加载之后。扫描 webView 中的第一个 UIScrollView,(我们正在扫描它,所以这不应该在更高的 iOS 版本上中断)。将 UIWebViews 框架设置为它的滚动视图大小。并将滚动视图的 contentSize 设置为 webViews contentSize(或者现在,它是框架)。
-(void)setup{
//Get the webView's first scrollView (the one all the content is in).
UIScrollView *webViewContentView;
for (UIView *checkView in [webView subviews] ) {
if ([checkView isKindOfClass:[UIScrollView class]]) {
webViewContentView = (UIScrollView*)checkView;
break;
}
}
webView.frame = CGRectMake(0, 0, webViewContentView.contentSize.width, webViewContentView.contentSize.height);
scrollView.contentSize = webViewContentView.contentSize;
scrollView.delegate = self;
}
要启用缩放,您需要从 scrollViews 委托中添加一个额外的方法。
-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView {
return webView;
}
您可以下载一个示例项目http://www.multiupload.com/P8SOZ4NW6C(这是一个 xcode 4 项目)。
注意:如果您放大太多,则缩放会使 webView 的内容像素化,因为 webView 不知道重新渲染内容,并且您无法单击链接(但在 PDF 中应该不成问题)。
编辑2:更好的方法
自从写这篇文章以来,我已经实现了一个更简单、更容易的方法,它也应该解决像素化问题。
-(void)removeInput{
UIScrollView *webViewContentView;
for (UIView *checkView in [webView subviews] ) {
if ([checkView isKindOfClass:[UIScrollView class]]) {
webViewContentView = (UIScrollView*)checkView;
break;
}
}
for (UIView *checkView in [webViewContentView subviews] ) {
checkView.userInteractionEnabled = NO;
}
}
现在您应该只能与 UIScrollView 本身进行交互,这意味着缩放、滚动等.. 应该仍然可以工作(并且页面应该在缩放时重新渲染而不是像素化)但是您不能选择任何文本或输入里面的任何东西。
这个方法的另一个特点是,基于这个 UIWebView 子视图列表,可以在页面开始加载之前而不是在页面加载完成之后设置它。