Попробуйте переключить свойство isEnabled текстового поля, а затем измените свойство isEnabled текстового поля. т.е. сначала отключите текстовое поле, затем измените редактируемое свойство текстового поля, а затем снова включите текстовое поле. Надеюсь, это решит вашу проблему.Я также приложил небольшой пример кода:)
class ViewController: NSViewController {
let textField = NSTextField()
let button = NSButton()
override func viewDidLoad() {
textField.translatesAutoresizingMaskIntoConstraints=false
textField.placeholderString = "ENTER PROMO CODE"
button.translatesAutoresizingMaskIntoConstraints=false
super.viewDidLoad()
textField.isEditable = true
button.action = #selector(buttonClicked(_:))
view.addSubview(textField)
view.addSubview(button)
NSLayoutConstraint(item: textField, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: textField, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: textField, attribute: .width, relatedBy: .equal, toItem: nil , attribute: .notAnAttribute, multiplier: 1.0, constant: 100).isActive = true
NSLayoutConstraint(item: button, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1.0, constant: 0).isActive = true
NSLayoutConstraint(item: button, attribute: .leading, relatedBy: .equal, toItem: textField, attribute: .trailing, multiplier: 1.0, constant: 20).isActive = true
NSLayoutConstraint(item: button, attribute: .width, relatedBy: .equal, toItem: nil , attribute: .notAnAttribute, multiplier: 1.0, constant: 50).isActive = true
// Do any additional setup after loading the view.
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
@objc func buttonClicked(_ sender: Any) {
textField.isEnabled = false
textField.isEditable = false
textField.isEnabled = true
}
}