1

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

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

有谁知道完成我需要的方法?

4

2 回答 2

2

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

于 2009-06-04T11:02:04.927 回答
2

我认为您将“鼠标向上”作为结束事件的关注可能过于狭窄。例如,当用户单击然后使用 shift 箭头键选择文本时会发生什么?在这种情况下,您的软件不应该具有相同的效果吗?

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 延迟来解决这个问题。每次您从网络视图中获得“选择更改”时,请重置您的 NSTimer。当它达到一些短暂的经过时间时,比如 0.5 秒,请竖起和/或移动你的窗户。

您可以通过在计时器到期时检查鼠标是否仍处于关闭状态等标准来微调它。如果鼠标按下,您可以将计时器推迟一段时间,然后再过半秒左右,看看鼠标是否已经抬起。

于 2009-06-04T15:21:01.253 回答