2011-09-22 9 views
15

Ho un semplice UIWebView con HTML caricato. Voglio mostrare PopoverView puntato sul testo selezionato. Posso ottenere il menuFrame di UIMenuController e usare il suo rect, ma il risultato non è accurato agli angoli dello schermo quanto mi serve. Posso calcolare le dimensioni dello schermo e ottenere menu frame rect e quindi posso supporre dove si trova la selezione, ma voglio sapere esattamente dove si trova il testo selezionato. È generalmente possibile?Come ottenere le coordinate (CGRect) per il testo selezionato in UIWebView?

risposta

15

È possibile utilizzare la funzione javascript getBoundingClientRect() sull'oggetto intervallo del testo selezionato. Questo è come lo faccio:

function getRectForSelectedText() { 
    var selection = window.getSelection(); 
    var range = selection.getRangeAt(0); 
    var rect = range.getBoundingClientRect(); 
    return "{{" + rect.left + "," + rect.top + "}, {" + rect.width + "," + rect.height + "}}"; 
} 

e in una categoria sulla UIWebView, si potrebbe utilizzare come tale:

- (CGRect)rectForSelectedText{ 
    CGRect selectedTextFrame = CGRectFromString([self stringByEvaluatingJavaScriptFromString:@"getRectForSelectedText()"]); 
    return selectedTextFrame; 
} 
+0

ho provato ma restituisce {(0,0), (0 , 0)} potresti aiutarmi per favore – dineshprasanna

+1

Se impostiamo la proprietà scalesPageToFit di UIWebView, allora non funziona come previsto. Qualsiasi altra soluzione per lo stesso.? – Girish

+0

funziona per file pdf? –