WebView选择更改的通知

时间:2009-06-04 08:25:55

标签: objective-c cocoa webview

我正在尝试实现一个功能,用户可以在WebView中选择一些文本,并在释放鼠标按钮后 ,会弹出一个小窗口,允许用户执行某些操作在选定的文本上。

然而,由于没有更好的词,通过释放鼠标按钮确定用户的选择何时被“确认”,我遇到了一些麻烦。 WebEditingDelegate非正式协议定义了-webViewDidChangeSelection:方法,但每次选择发生变化时都会调用它。因此,例如,如果用户拖动整行,则会多次调用-webViewDidChangeSelection: - 每次选定范围更改一次。显然,这不会起作用,因为在拖曳过程中我会多次弹出我的窗户。

有谁知道如何实现我的需要?

2 个答案:

答案 0 :(得分:2)

您可以使用相同的方法,但只测试鼠标是否已关闭,如果是,则不执行任何操作,如果鼠标未关闭,则假设它刚刚释放,然后显示窗口。

答案 1 :(得分:2)

我认为你关注“鼠标”作为一个结束事件可能太狭隘了。例如,当用户点击然后选择带有shift-arrow键的文本时会发生什么?在这种情况下,您的软件不应该具有相同的效果吗?

对于等式的鼠标部分,有什么鲜为人知的建议声音是合理的,但是我担心当选择从鼠标改变时,当鼠标启动时,你可能永远不会得到最终的“选择改变”。

所以,我可能会用纯NSTimer延迟来解决这个问题。每次从Web视图中获得“选择更改”时,请重置NSTimer。当它达到一段很短的经过时间时,比如0.5秒说,放上和/或移动你的窗户。

您可以通过在计时器到期时检查诸如鼠标是否仍然关闭等标准来对此进行微调。如果鼠标停机,您可能只是稍微推迟计时器,看看鼠标是否在另外半秒后被抬起。