【发布时间】:2021-04-15 20:01:23
【问题描述】:
Xcode 12 中是否有类似 textFieldDidChange 的功能,可以在 13 之前的 iOS 版本上运行?
每当 UITextField 发生变化时,我都会使用此函数来读取它的内容:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard CharacterSet(charactersIn: "0123456789").isSuperset(of: CharacterSet(charactersIn: string)) else {
return false
}
let s: String = textField.text ?? ""
print("s = \(s)")
return true
}
但打印输出总是落后一个字符。
例如:
当我输入 1 时,打印输出为s = "。添加 2(文本字段现在显示 12)打印 s = 1。在 3(文本字段现在包含 123)之后,s = 12。等等。总是落后一个字符。
这是为什么? (我猜是因为在函数返回 true 之前,该字符不会成为 textfield.text 的一部分。)
这会得到内容:
func textFieldDidChangeSelection(_ textField: UITextField) {
let s: String = textField.text ?? ""
print("s = \(s)")
}
但它仅适用于 iOS 13.x。
如何在任何 iOS 版本发生更改时获取 UITextfield 的内容?
【问题讨论】:
-
您只是在寻找
textDidChange。看看 UIKitPlus lib 它比纯 UIKit 更容易使用 -
我去看看。但是必须有一种方法可以使用已经内置的东西!