如何清除NSTextView选择而不使其成为第一响应者?

时间:2018-09-10 15:08:24

标签: cocoa appkit nstextview

我有一个基本的Cocoa应用,其中包含BIT0个。当文本视图失去焦点(即退出其第一响应者状态)时,我想清除其选择。

我的策略是扩展BIT6并覆盖NSTextView

NSTextView

问题在于,同时调用resignFirstResponder()override func resignFirstResponder() -> Bool { // Both result in the text view becoming first responder again: clearSelection(nil) setSelectedRange(NSRange(location: 0, length: 0)) return super.resignFirstResponder() } 会使文本视图再次成为第一响应者。

有没有清除选择而不成为第一响应者的方法?

我也尝试覆盖clearSelection()并暂时返回setSelectedRange(),但这也不起作用。

1 个答案:

答案 0 :(得分:0)

今天遇到了同样的问题并找到了解决方法

您可以在setSelectedRange的委托方法NSTextView中执行textDidEndEditing,但这不会导致NSTextView成为第一响应者。

class TextView: NSTextView {
    init() {
        self.delegate = self
        ....
    }
    ....
}

extension TextView: NSTextViewDelegate {
    public func textDidEndEditing(_ notification: Notification) {
        setSelectedRange(NSMakeRange(string.count, 0))
    }
}