在按Enter后,是否有一种轻松取消选择NSTextField
的方法?
答案 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)
这是我做到的一种方式。
通过用isSelectable
和isEditable
禁用它,然后设置一个计时器在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
}