检测 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 文本选择中的文本选择变化的主要内容,如果未能解决你的问题,请参考以下文章