为什么在shouldChangeCharactersIn中返回false会覆盖UITextField中的旧文本?

问题描述 投票:1回答:1

问题代码

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;否则,返回true。否则,为false保留旧文本。

为什么不保留我的旧文本?一个重要的观察结果是,在调用shouldChangeCharactersIn之前发生了文本字段覆盖。非常奇怪。


PS:shouldChangeCharactersIn方法之外的任何地方,文本字段的文本都不会更改/分配。

问题代码公共函数textField(_ textField:UITextField,shouldChangeCharactersIn范围:NSRange,replaceString string:String)-> Bool {return false} TextField Creation @ ...

ios swift uitextfield copy-paste uitextfielddelegate
1个回答
1
投票

我知道为什么会这样。原因是由于文本字段是SecureTextEntry

© www.soinside.com 2019 - 2024. All rights reserved.