我现在正在用 Swift 编写自定义 UITextField,并遇到以下情况:
class MyField: UITextField {
open override var text: String? {
didSet {
// some logic that normalizes the text
}
}
private func setup() { //called on init
addTarget(self, action: #selector(textEditingChanged(_:)), for: .editingChanged)
}
@objc func textEditingChanged(_ sender: UITextField) {
}
}
现在,在对此进行测试时,我观察到,当用户输入内容时,textEditingChanged
会调用它,但text.didSet
不会调用。也不是text.willSet
,就此而言。但是,在 中textEditingChanged
,文本字段的文本将已更新为新值。
谁能解释这里发生了什么?斯威夫特是故意绕过二传手吗?我应该如何知道何时/是否调用了 setter,在 UIKit 中是否有任何逻辑?