How to get coordinates (CGRect) for the selected text in UIWebView?
Asked Answered
A

1

16

I have simple UIWebView with loaded html. I want to show the PopoverView pointed to the selected text. I can get the menuFrame of the UIMenuController and use its rect, but the result isn't as accurate at the corners of the screen as I need. I can calculate the screen size and get menuFrame rect and then I can suppose where the selection may be found, but I want exactly know where is the selected text. Is it generally possible?

Allele answered 22/9, 2011 at 12:22 Comment(0)
B
15

You can use the javascript function getBoundingClientRect() on the range object of the selected text. This is how I do it:

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

and in a category on UIWebView, you could use it like such:

- (CGRect)rectForSelectedText{
    CGRect selectedTextFrame = CGRectFromString([self stringByEvaluatingJavaScriptFromString:@"getRectForSelectedText()"]);
    return selectedTextFrame;
}
Backwardation answered 11/10, 2011 at 11:30 Comment(3)
I have tried but it returns {(0,0),(0,0)} could you help me pleaseCorfu
If we set the scalesPageToFit property of UIWebView then it does not work as expected. Any other solution for same.?Contortion
how to get start and end range of webview selected textKhaki

© 2022 - 2024 — McMap. All rights reserved.