11

UIWebView私はロードされたhtmlファイルでシンプルにしています。PopOverController選択したテキストを指すように表示したい-

ここに画像の説明を入力.

coordinatesから選択したテキストの が必要ですUIWebViewscalesPageToFitのプロパティをに設定するUIWebViewNOこのリンクは正常に機能します。scalesPageToFitのプロパティをUIWebViewに設定するYESと、失敗します。

誰でも私の問題を整理するのを手伝ってください。

4

4 に答える 4

1

これは、JavaScript 内でほぼ完全に実行し、結果を Objective C に戻す必要があります。表示するコンテンツを制御できる場合は、この関数を<script>タグに追加できます。それ以外の場合は、この投稿で説明されているように注入する必要があります。

function rectsForSelection() {
    var i = 0, j = 0;
    var allSelections = window.getSelection();
    var result = []; // An empty array right now
    // Generally, there is only one selection, but the spec allows multiple
    for (i=0; i < allSelections.rangeCount; i++) {
        var aRange = allSelections.getRangeAt(i);
        var rects = aRange.getClientRects();
        for (j=0; j<rects.length; j++) {
            result.push(rects[j]);
        }
    }
    return JSON.stringify(result);
}

次に、Objective C コードから、次のようなことを行います。

NSString *rectsString = [webView stringByEvaluatingJavaScriptFromString:@"rectsForSelection();"];
NSData *rectsData = [rectsString dataUsingEncoding:NSUTF8StringEncoding];
NSArray *rects = [NSJSONSerialization JSONObjectWithData:rectsData
                                                 options:0
                                                   error:NULL]; //Do Your Own Error Checking

webView.scrollViewこれにより、 ではなく内で有効な座標が取得されることを付け加えておきますwebView

于 2013-10-27T15:40:23.687 に答える
1

まず、次のようにネイティブの長押しジェスチャ認識機能を削除します。

for(UIGestureRecognizer *gesRecog in yourWebView.gestureRecognizers)
    {
        if([gesRecog isKindOfClass:[UILongPressGestureRecognizer class]])
        {
            [startTF removeGestureRecognizer:gesRecog];
        }
    }

次に、カスタムのものを割り当てます。

    UILongPressGestureRecognizer *myOwnLongPressRecog = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleWebViewLongpress:)];

        // set numberOfTapsRequired and numberOfTouchesRequired as per your requirement:       

[yourWebView addGestureRecognizer:myOwnLongPressRecog];

// 長押しを次のように処理します。

 - (void) handleWebViewLongpress: (UIGestureRecognizer *) recog
    {
     int zoomedWidth = [[yourWebView stringByEvaluatingJavaScriptFromString:@"window.innerWidth"] intValue];

        CGFloat scale = yourWebView.frame.size.width / zoomedWidth;  // get the scaled value of your web view

        CGPoint zoomedCords = [gesture locationInView:self.webView];

        zoomedCords.x /= scale; // Normal math. Divide by the scale to get the real thing.
        zoomedCords.y /= scale;

NSLog(@"%@", zoomedCords);

            }
于 2013-10-19T05:19:59.073 に答える
0

UIWebView は実際に HTML を UIViews にレンダリングします。特に、選択可能なテキストを UITextView にレンダリングする可能性があるため、適切なビューのデリゲート メソッドを利用する必要があります。

これがうまくいくはずのハックです:

  1. Web ビューが完全に読み込まれるまで待ちます。
  2. Ole Begemann の説明に従って、UIWebView のサブビューをトラバースします
  3. UITextView タップに到達したら、そのデリゲート メソッドをタップすると、デリゲート チェーンに似た処理を実行してこれを取得できます - これについての投稿はこちら
  4. selectedRange を取得して操作するUITextViewDelegateメソッドを実装します。textViewDidChangeSelection:

** ステップ 3 と 4 の代わりに、KVO を使用して textView の selectedRange の変更をリッスンすることもできます。

于 2013-10-27T09:06:42.907 に答える