![](/img/trans.png)
[英]Swift change UITextfield subclass value in another viewcontroller
[英]Swift UITextField subclass handle text change programmatically
我有一個UITextField
的子類,專門用於處理Date文本。 我有一個使用此文本字段的tableviewcell
:
let dateInput: DateTextField
現在控制器需要在顯示之前初始化dateInput
的文本,如下所示:
cell.dateInput.text = "01/29/2016"
現在,我希望能夠檢測到從子類更改的文本,以便我可以更新內部日期變量,以便它與文本同步。
我實現了textfield委托方法,但只捕獲用戶所做的更改,而不是以編程方式。
您可以覆蓋屬性並在自定義類中添加didSet
觀察者:
class DateTextField: UITextField {
override var text: String? {
didSet {
// Do your stuff here
}
}
}
我的解決方案是讓子類的每個實例都為UITextFieldDidChange
維護自己的通知,並使用自定義協議將該信息轉發給監聽器。
protocol MutableTextFieldDelegate {
func textChanged(_ sender:MutableTextField)
}
class MutableTextField : UITextField {
var textChangedDelegate : MutableTextFieldDelegate?
var previousValue : String?
override func awakeFromNib() {
super.awakeFromNib()
NotificationCenter.default.addObserver(forName: .UITextFieldTextDidChange, object: self, queue: nil) { [weak self] notification in
guard let strongSelf = self else { return }
guard let object = notification.object as? MutableTextField, object == strongSelf else { return }
if strongSelf.previousValue != strongSelf.text {
strongSelf.textChangedDelegate?.textChanged(strongSelf)
}
strongSelf.previousValue = strongSelf.text
}
}
}
swift5: NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification
...
檢查其中的UIControlEventEditingChanged事件...,您可以設置以下邏輯。
這篇文章的例子:
// Add a "textFieldDidChange" notification method to the text field control.
[textField addTarget:self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.