取消选择NSTextField中的文本

时间:2017-11-17 22:11:08

标签: swift macos cocoa nstextfield

在按Enter后,是否有一种轻松取消选择NSTextField 的方法?

2 个答案:

答案 0 :(得分:3)

首先,您需要将视图控制器作为文本字段的委托。然后重写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
            }
        }
    }
}

答案 1 :(得分:0)

这是我做到的一种方式。

通过用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
}