Как получить координаты (CGRect) для выбранного текста в UIWebView?

У меня есть простой UIWebView с загруженным html. Я хочу, чтобы PopoverView указывал на выделенный текст. Я могу получить menuFrame UIMenuController и использовать его rect, но результат не так точным в углах экрана, сколько мне нужно. Я могу рассчитать размер экрана и получить menuFrame rect, а затем я могу предположить, где выбор может быть найден, но я хочу точно знать, где находится выделенный текст. Возможно ли вообще?

Ответы

Ответ 1

Вы можете использовать функцию javascript getBoundingClientRect() для объекта диапазона выбранного текста. Вот как я это делаю:

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

и в категории в UIWebView вы можете использовать его следующим образом:

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