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

但是,通过释放鼠标按钮,我在确定何时“确认”“确认”时遇到了一些麻烦。这 WebEditingDelegate 非正式协议定义 -webViewDidChangeSelection: method, but it's called every time the selection changes at all.因此,例如,如果用户在整个行上拖动, -webViewDidChangeSelection: 被称为多次 - 每次所选范围更改一次。显然,这种工作将无法使用,因为在阻力过程中我会多次弹出窗户。

有人知道一种完成我需要的方法吗?

有帮助吗?

解决方案

我认为您对“鼠标”的关注可能太狭窄了。例如,当用户单击然后使用Shift-Arrow键选择文本时会发生什么?在这种情况下,您的软件不应该产生相同的效果吗?

What littleknown suggested sounds reasonable for the mouse part of the equation, but I'm concerned that when the selection is changing from the mouse, you may never get a final "selection changed" when the mouse is up.

因此,我可能会以纯净的NSTIMER延迟解决此问题。每次从Web视图中更改“选择”时,请重置您的NSTIMER。当它达到一些短暂的时间时,例如0.5秒说,抬起和/或移动窗户。

您可以通过在计时器到期时检查标准,例如鼠标是否仍在下降,从而对此进行微调。如果鼠标向下,您可能只会将计时器推迟一会儿,看看鼠标在另一秒钟左右后是否已抬起。

其他提示

您可以使用相同的方法,但只需测试鼠标是否向下,如果是的话,什么也不做,如果鼠标不向下,则假设它只是释放了,然后显示您的窗口。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top