Iphone 显示文档时不带复制/粘贴和选择矩形的UIWebView

Iphone 显示文档时不带复制/粘贴和选择矩形的UIWebView,iphone,ipad,uiwebview,selection,uiresponder,Iphone,Ipad,Uiwebview,Selection,Uiresponder,在我的应用程序中,我想禁用UIWebView对象显示的内容的复制/粘贴/剪切。为了实现这一点,我创建了一个UIWebView子类,并用sender:idsender方法重写了-BOOLcanPerformAction:SELaction: 现在,用户不再可以进行此类操作,但UIWebView仍显示选择矩形,如以下屏幕截图所示: 注意:UIWebView中显示的内容不是HTML页面。我正在显示从文件加载的文档文件PDF、DOC、PPT,使用: NSURL *fileURL = [NSURL fil

在我的应用程序中,我想禁用UIWebView对象显示的内容的复制/粘贴/剪切。为了实现这一点,我创建了一个UIWebView子类,并用sender:idsender方法重写了-BOOLcanPerformAction:SELaction:

现在,用户不再可以进行此类操作,但UIWebView仍显示选择矩形,如以下屏幕截图所示:

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

NSURL *fileURL = [NSURL fileURLWithPath:<document file path..>];
NSURLRequest *fileRequest = [NSURLRequest requestWithURL:fileURL];
[<uiwebView> loadRequest:fileRequest];
是否有任何方法也可以禁用/隐藏此选择矩形功能


[]s,

您可以尝试将javascript注入webView。这段代码也适用于iPhone,但只有当页面完全加载时才有效。 或

当页面只加载了一半或仍在加载时,为了使其正常工作,您将不得不使用类似于此的设置,在其中注入禁用的javascript,就像它开始选择一样。

我能想到的最后一件事是,您是否测试过将选择器@selectorselect:添加到禁用选择器列表中

编辑: 好的,当你想显示PDF而不是html页面时,你可以试试这个

设置

将webView置于滚动视图中

将ScrollView的:委托设置为self;最小缩放到1.0,最大缩放到任何你想要的

在weView完成加载之后。 扫描webView中的第一个UIScrollView,我们正在扫描它,以便在更高版本的iOS上不会中断。 将UIWebViews框架设置为其滚动视图大小。 然后将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委托添加一个额外的方法

-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return webView;
}
您可以下载一个示例项目,它是一个xcode 4项目

注意:如果你放大到很大程度,缩放会对网络视图的内容进行像素化,因为网络视图不知道如何重新渲染内容,当然,你不能单击链接,但在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本身交互,这意味着缩放、滚动等。。当你缩放的时候,页面应该重新呈现,而不是像素化,但是你不能选择任何文本,或者键入任何内容


这种方法的另一个特点是,在页面开始加载之前,而不是在页面加载完成之后,可以设置此选项。

我在这里找到了Johnny Rockex的答案,它的效果非常好。它适用于包含在UIWebView中显示的.pdf文件的文档

除非你100%确定没有其他人提供相同或类似的内容,否则此功能只会让人们远离你的应用程序。@Franci Penov:我能想到很多情况下,用户不希望选择指针出现。事实上,当我阅读一些东西并按住手指慢慢滚动,阅读,拖动,最后选择但想要滚动时,我的用户体验经常会被破坏。@Franci:我100%肯定没有其他人会提供这样的内容。创建该应用程序是为了显示仅限于特定公众的内容。此功能是客户的要求,否则我当然不会为此烦恼@Kalle:我完全同意你的观点。我很感激你的回答,在UIWebView中显示HTML页面时,这似乎很有效。我想我的问题不够清楚,我会修改它。UIWebView中显示的内容是PDF、DOC、PPT、XLS文件,我只是请求从文件中加载。您可以尝试的另一种方法是获取UIWebView的内容视图大小,将webView大小设置为禁用webView上的用户交互,将其添加到一个UIScrollView中,并将其contentSize设置为webViews大小,如果您愿意,我将编写另一个答案,其中包含更多详细信息。这看起来是解决我问题的方法。我可以写出来,但如果你可以,我希望看到你的实现,并接受它作为一个答案。谢谢。爱德华多.科埃略我更新了帖子,需要代码的主要位和一个你可以下载的示例项目。如果你更新了你可能想考虑切换的应用程序,最好用一个更好的解决方案来解决这个问题。
-(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;
    }
}