【发布时间】:2020-04-04 17:17:17
【问题描述】:
问题代码
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return false
}
TextField 创建
@discardableResult fileprivate func otpTextField() -> BJOTPTextField {
let textField = BJOTPTextField()
textField.text = "1"
textField.delegate = self
textField.textColor = .black
textField.textAlignment = .center
textField.isSecureTextEntry = true
textField.keyboardType = .numberPad
return textField
}
问题
我的视图控制器中有一个UITextField 子类,它在初始化时具有文本(“1”)。我将大文本复制粘贴到文本字段上。在shouldChangeCharactersIn 方法中,即使我显式返回false,文本字段中的当前文本(“1”)也会被删除,变为空,为什么?
shouldChangeCharactersIn 文档
如果指定的文本范围应该被替换,则返回 true; 否则为 false 以保留旧文本。
为什么我的旧文本没有得到维护?一个重要的观察结果是文本字段覆盖发生在调用 shouldChangeCharactersIn 之前。很奇怪。
PS:文本字段的文本不会在shouldChangeCharactersIn 方法之外的任何地方更改/分配。
【问题讨论】:
标签: ios swift uitextfield copy-paste uitextfielddelegate