gpt4 book ai didi

iphone - 显示文档时没有复制/粘贴和选择矩形的 UIWebView

转载 作者:行者123 更新时间:2023-12-03 18:41:56 26 4
gpt4 key购买 nike

在我的应用程序中,我想禁用 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 仍然显示“选择矩形”,如下面的屏幕截图所示:

Selection rectangle

注意:UIWebView 中显示的内容不是 HTML 页面。我正在显示文档文件(PDF、DOC、PPT),使用以下方式从文件加载:

NSURL *fileURL = [NSURL fileURLWithPath:<document file path..>];
NSURLRequest *fileRequest = [NSURLRequest requestWithURL:fileURL];
[<uiwebView> loadRequest:fileRequest];

有什么方法可以禁用/隐藏此选择矩形功能吗?

[]s,

最佳答案

您可以尝试将 javascript 注入(inject)到 webView 中。此代码也适用于 iPhone,但仅当页面完全加载时。 http://www.javascriptsource.com/page-details/disable-text-selection.html或者 http://solidlystated.com/scripting/proper-way-to-disable-text-selection-and-highlighting/

要使其在页面仅加载一半或仍在加载时正常工作,您可能必须使用与此类似的设置,在该设置中,您将在开始选择时注入(inject)禁用 JavaScript。 http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/

我能想到的最后一件事可能会起作用,您是否测试过将选择器 @selector(select:) 添加到禁用选择器列表中?

编辑:好的,当您要显示 PDF 而不是 html 页面时,您可以尝试一下。

设置

将webView放入scrollView中;

设置 ScrollView's: delegate 为 self;最小缩放至 1.0,最大缩放至您想要的任意值;

weView 加载完成后。扫描 webView 中的第一个 UIScrollView(我们正在扫描它,因此这不会在更高的 iOS 版本上中断)。将 UIWebViews 框架设置为其 ScrollView 大小。并将scrollView的contentSize设置为webViews的contentSize(或者现在是frame)。

-(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委托(delegate)中添加一个额外的方法。

-(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 本身进行交互,这意味着缩放、滚动等应该仍然有效(并且页面应该在缩放时重新渲染而不是像素化),但你无法选择任何文本,或输入任何内容。

此方法的另一个特点是基于 this list of UIWebView subViews 可能可以在页面开始加载之前而不是完成加载页面之后进行设置。

关于iphone - 显示文档时没有复制/粘贴和选择矩形的 UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5515522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com