2011-12-11 105 views
1

关于如何获取UIWebView中的选定文本有很多指导,但似乎无法找到有关如何检测选择中的更改的任何指导。我明白,我可以简单地检测其他地方的水龙头,并始终得到最新的选择,但我想创建一个独立的视图,包装所有这些功能。检测UIWebView文本选择中的文本选择更改

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

任何想法我怎么能在一个视图内实现这一点?我已经尝试过JavaScript,但我想我是 不适合它。

回答

1

您可以使用document.addEventListener("selectionchange")它将触发时选择的变化,并通过桥接转发这些更改的OBJ-C。

桥梁:

  1. WebViewJavascriptBridge
  2. JavaScriptCore

例如代码:

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

介意分享一个例子? –

+1

@RobCaraway我一直在搞UIWebView,实际上有几种方法。看看我更新的答案。 – mattsven

+0

如何获得'document'变量? – NikeAlive

0

如果我没有完全弄错,在使用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]; 
}