取消选择 NSTextField 中的文本

Deselect the text in a NSTextField

有没有一种简单的方法可以在 按回车键后取消选择 NSTextField

首先,您需要让视图控制器成为文本字段的委托。然后你覆盖 NSControl 实例方法 controlTextDidEndEditing(_:),让你的文本字段当前编辑器选择范围 并从主线程将其设置回您的文本字段:

import Cocoa

class ViewController: NSViewController, NSTextFieldDelegate {
    @IBOutlet weak var textField: NSTextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        textField.delegate = self
    }
    override func controlTextDidEndEditing(_ obj: Notification) {
        if let selectedRange = textField.currentEditor()?.selectedRange {
            DispatchQueue.main.async {
                self.textField.currentEditor()?.selectedRange = selectedRange
            }
        }
    }
}

这是我做的一种方法。

通过 isSelectableisEditable 禁用它,然后设置一个定时器在 0.5 秒后重新启用它

@IBAction func timeCodeChanged(_: NSTextField) {
    timecodeLabel.isSelectable = false
    timecodeLabel.isEditable = false
    Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(reEnableLabel), userInfo: nil, repeats: false)
}

@objc func reEnableLabel() {
    timecodeLabel.isSelectable = true
    timecodeLabel.isEditable = true
}