6

私のアプリでは、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、

4

2 に答える 2

14

javascript を webView に挿入してみることができます。このコードは iPhone でも機能しますが、ページが完全に読み込まれている場合に限られます。 http://www.javascriptsource.com/page-details/disable-text-selection.htmlまたは http://solidlystate.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:) を追加してテストしましたか?

編集:htmlページではなくPDFを表示するものとして、これを試すことができます。

設定

webView を scrollView に入れます。

ScrollView を次のように設定します。最小ズームを 1.0 に、最大ズームを任意にズームします。

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は再レンダリングすることを認識していないため、ズームインすると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 サブビューのリストに基づいて、ページの読み込みが完了した後ではなく、ページの読み込みが開始される前にこれを設定できる可能があることです。

于 2011-04-01T16:15:02.443 に答える