在我的应用程序中,我想禁用UIWebView对象显示的内容的复制/粘贴/剪切。为此,我创建了一个UIWebView子类并覆盖了- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
方法:
#pragma mark - UIResponderStandardEditActions
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (action == @selector(copy:) ||
action == @selector(paste:)||
action == @selector(cut:)) {
return _copyCutAndPasteEnabled;
}
return [super canPerformAction:action withSender:sender];
}
现在用户不再可以进行此类操作,但UIWebView仍会显示“选择矩形”,如下面的屏幕截图所示:
注意:UIWebView中显示的内容不是HTML页面。我正在显示文档文件(PDF,DOC,PPT),使用以下文件从文件加载:
NSURL *fileURL = [NSURL fileURLWithPath:<document file path..>];
NSURLRequest *fileRequest = [NSURLRequest requestWithURL:fileURL];
[<uiwebView> loadRequest:fileRequest];
有没有办法禁用/隐藏这个选择矩形功能?
[] S,
答案 0 :(得分:14)
您可以尝试将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的:委托给自己; min zoom to 1.0 and max zoom to your want;
weView完成加载后。 在webView中扫描第一个UIScrollView,(我们正在扫描它,所以这不应该在以后的iOS版本中破坏)。 将UIWebViews框架设置为scrollViews大小。 并将scrollView的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不知道要重新渲染东西,并且因为你无法点击链接(但在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本身进行交互了,这意味着缩放,滚动等等应该仍然可以工作(当你缩放时页面应该重新渲染而不是像素化)但是你不能选择任何文本,或输入任何内容。
此方法的另一个原因是基于this list of UIWebView subViews,可能可以在页面开始加载之前设置它,而不是在加载页面之后设置它。
答案 1 :(得分:0)
我在Johnny Rockex找到了答案,它就像一个冠军。它适用于UIWebView中显示的文档(包括.pdf文件)。 UIWebView without Copy/Paste when displaying PDF files