UITextFieldDelegate 方法僅在我們通過鍵盤將資料輸入到文本欄位時才有效。但是我們我改變了 textfield 的值。來自任何按鈕操作的文本都不會觸發其委托方法。我還嘗試添加客觀樂趣來聆聽值變化,但它們也僅在文本欄位從鍵盤接收輸入時才起作用。
override func viewDidLoad() {
super.viewDidLoad()
txtMinute.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
}
@objc func textFieldDidChange(_ textField: UITextField) {
print(textField.text)
enableEditButton()
}
@IBAction func change_minutes(_ sender: Any) {
txtMinute.text = "123"
}
關于如何在按鈕操作中列出文本欄位更改的任何建議?
uj5u.com熱心網友回復:
請嘗試以下操作:
override func viewDidLoad() {
super.viewDidLoad()
txtMinute.delegate = self
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let oldText = textField.text, let range = Range(range, in: oldText) else {
return true
}
let newText = oldText.replacingCharacters(in: range, with: string)
print(newText)
return true
}
uj5u.com熱心網友回復:
TextField 委托方法僅在您通過鍵盤提供輸入時呼叫,假設如果您希望在使用自定義 NumPad 時呼叫這些委托方法,您需要手動呼叫如下所示
@IBAction func change_minutes(_ sender: Any) {
if let selectedRange = txtMinute.selectedTextRange {
let range=txtMinute.rangeFromTextRangeForInsertion(textRange: selectedRange)
txtMinute.delegate?.textField?(txtMinute, shouldChangeCharactersIn: range, replacementString: sender.titleLabel?.text ?? "")
}
}
}
Extension UITextFieldDelegate{
func rangeFromTextRangeForInsertion(textRange:UITextRange) -> NSRange {
let cursorPosition = self.offset(from: self.beginningOfDocument, to: textRange.start)
let length = self.offset(from: textRange.start, to: textRange.end)
return NSMakeRange(cursorPosition, length)
}
}
//Your TextField Delegate Method
extension ViewController:UITextFieldDelegate{
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
enableEditButton()
return true
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/366176.html
