【问题标题】:Notification of WebView's selection changeWebView 选择变化的通知
【发布时间】:2009-06-04 08:25:54
【问题描述】:

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

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

有人知道实现我需要的方法吗?

【问题讨论】:

    标签: objective-c cocoa webview


    【解决方案1】:

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

    鲜为人知的建议对于等式中的鼠标部分来说听起来是合理的,但我担心当鼠标的选择发生变化时,当鼠标启动时,您可能永远不会得到最终的“选择改变”。

    所以,我可能会用纯粹的 NSTimer 延迟来解决这个问题。每次您从网络视图中获得“选择更改”时,请重置您的 NSTimer。当它达到一些短暂的经过时间(例如 0.5 秒)时,请竖起和/或移动您的窗口。

    您可以通过在计时器到期时检查鼠标是否仍处于按下状态等标准来微调此设置。如果鼠标被按下,你可以将定时器推迟一点,再过半秒左右看看鼠标是否被抬起。

    【讨论】:

    • 是的,当然只关注鼠标有点狭隘。我不希望它会导致通过键盘修改选择出现问题,因为 WebView 不可编辑,因此,用户无法使用键盘更改插入点(用户将要使用的数据类型要查看的内容不会来自可编辑的文本区域或类似的东西)。不过,我想,尽管如此……
    • 文本不必是可编辑的,也可以通过键盘选择。只需双击一个单词将其选中,然后移动箭头即可查看。另外,cmd-A 全选。这些可能不是常见的用例,但您最好对产品进行润色以覆盖它们。
    • 哇,我从来没有想过可以像这样扩展 WebView 的选择(从 10.0 开始使用 OS X 后学到了一些新东西!)。不知道为什么不,因为它与 OS X 中的所有其他可选文本一致。 cmd-A 案例并不是真正的问题,因为由于所讨论文本的性质,选择全部没有意义。但你是对的,我肯定需要处理选择扩展。谢谢!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      相关资源
      最近更新 更多