首页 > 解决方案 > 选项命令拖动时未调用 NSTextView 的 textViewDidChangeSelection

问题描述

我有一个 NSTextView。

当我拖动以更改选择或命令拖动或选项拖动时,将调用 textViewDidChangeSelection,但当我进行选项命令拖动时不会调用。

有时日志会输出以下内容:

[Framework] Shared items array is empty
[Framework] No shared items can be accessed

选项命令拖动当然会改变选择,所以我希望在选项命令拖动发生时得到通知。

标签: swiftmacosnstextview

解决方案


“willChangeSelectionFromCharacterRanges”文档说只有当 setSelectedRange 或 setSelectedRanges 的“stillSelecting”参数设置为 false 时才会调用它。因此,我将 NSTextView 子类化以覆盖该参数,如下所示:

class NeverStillSelectingTextView : NSTextView {

override func setSelectedRanges(_ ranges: [NSValue], affinity: NSSelectionAffinity, stillSelecting stillSelectingFlag: Bool) {
    super.setSelectedRanges(ranges, affinity: affinity, stillSelecting: false)
}

override func setSelectedRange(_ charRange: NSRange, affinity: NSSelectionAffinity, stillSelecting stillSelectingFlag: Bool) {
    super.setSelectedRange(charRange, affinity: affinity, stillSelecting: false)
}
}

现在 willChangeSelectionFromCharacterRanges 在您命令选项拖动时始终被调用。


推荐阅读