如何获取 UIWebView 中选定文本的坐标(CGRect)?

Posted

技术标签:

【中文标题】如何获取 UIWebView 中选定文本的坐标(CGRect)?【英文标题】:How to get coordinates (CGRect) for the selected text in UIWebView? 【发布时间】:2011-11-22 19:11:53 【问题描述】:

我有简单的 UIWebView 和加载的 html。 我想显示指向所选文本的 PopoverView。 我可以获取 UIMenuController 的 menuFrame 并使用它的矩形,但结果在屏幕的角落并不像我需要的那样准确。 我可以计算屏幕大小并获取 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;

【讨论】:

我试过但它返回 (0,0),(0,0) 你能帮我吗 如果我们设置 UIWebView 的 scalesPageToFit 属性,那么它不会按预期工作。还有其他相同的解决方案吗? 如何获取 webview 所选文本的开始和结束范围

以上是关于如何获取 UIWebView 中选定文本的坐标(CGRect)?的主要内容,如果未能解决你的问题,请参考以下文章

从 uiwebview Xcode 中获取选定的文本

UIWebview 获取选定文本的范围并保存以备后用

如何通过辅助功能 API 获取当前选定文本的全局屏幕坐标。

检测 UIWebView 文本选择中的文本选择变化

显示 UIMenuController 时获取选定的文本

如何在 UIWebView 中获取(X,Y)触摸坐标