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

Posted

技术标签:

【中文标题】检测 UIWebView 文本选择中的文本选择变化【英文标题】:Detect text selection changes in UIWebView text selection 【发布时间】:2011-12-11 20:23:05 【问题描述】:

有很多关于如何在UIWebView 中获取选定文本的指南,但我似乎找不到任何关于如何检测选择变化的指南。我知道我可以简单地检测其他地方的点击并始终获得最新的选择,但我想创建一个包含所有这些功能的独立视图。

我目前有一个包含UIWebView 实例并处理解析并将内容传递给Web 视图的视图。据我所知,检测点击需要自定义窗口实现(指示here)。我想遵循关注点分离并尽可能避免任何自定义窗口实现。

有什么想法可以在视图中实现吗?我已经尝试过 javascript 但我想我是 不是很能胜任。

【问题讨论】:

【参考方案1】:

您可以使用document.addEventListener("selectionchange"),它会在选择更改时触发,并通过桥将这些更改转发给 Obj-C。

桥梁:

    WebViewJavascriptBridge JavaScriptCore

示例代码:

document.addEventListener("selectionchange", function()
    bridge.send("selectionchange"); // WebViewJavaScriptBridge
    bridge.selectionChanged();  // JavaScriptCore
, false);

【讨论】:

介意分享一个例子吗? @RobCaraway 我一直在搞乱 UIWebView,实际上有几种方法。查看我的更新答案。 如何获取document变量? @NikeAlive 我发布的 Javascript 示例代码。 document 变量是一个全局变量,在您编写(Web)javascript 代码时自动可用。【参考方案2】:

如果我没有完全弄错,当使用UIWebView 和javascript 组合时,无法检测选择范围是否发生变化。我的解决方案是轮询选择范围而不是通知其更改。目前我不需要实时更新,所以只知道是否有选择就足够了。文本选择是按需检索的,对于选择更改,我使用UITapGestureRecognizer

为了清除选择,我不得不使用一个小的延迟。点击后不会立即清除选择。

- (void)tap:(id)sender
    
    [self updateSelection];
    // A simple hack to detect when selection is cleared.
    [self performSelector:@selector(updateSelection) withObject:self afterDelay:0.5];

【讨论】:

以上是关于检测 UIWebView 文本选择中的文本选择变化的主要内容,如果未能解决你的问题,请参考以下文章

在 UIWebView 中操作后隐藏文本选择句柄

检测 UIWebView 中的文本亮点

在 iOS Mobile Safari 和/或 UIWebView 中控制文本选择行为?

如何在自定义视图中实现文本选择阴影,如 UIWebView

UIWebview 未检测到链接

检测uitextfied中的文本变化?