2011-09-22 9 views
15

Tengo UIWebView simple con html cargado. Quiero mostrar el PopoverView apuntado al texto seleccionado. Puedo obtener el marco de menú del UIMenuController y usar su rect, pero el resultado no es tan preciso en las esquinas de la pantalla como lo necesito. Puedo calcular el tamaño de la pantalla y obtener el menú Marco y luego puedo suponer dónde se puede encontrar la selección, pero quiero saber exactamente dónde está el texto seleccionado. ¿Es generalmente posible?¿Cómo obtener las coordenadas (CGRect) para el texto seleccionado en UIWebView?

Respuesta

15

Puede utilizar la función javascript getBoundingClientRect() en el objeto de rango del texto seleccionado. Así es como lo hago:

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

y en una categoría en UIWebView, se podría utilizar como tales:

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

he intentado pero vuelve {(0,0), (0 , 0)} podría ayudarme por favor – dineshprasanna

+1

Si configuramos la propiedad de escalas de la página de UIWebView, no funciona como se esperaba. Cualquier otra solución para el mismo.? – Girish

+0

¿funciona para el archivo pdf? –

Cuestiones relacionadas