在 UITextField 中显示“#”而不是“项目符号”以实现“安全文本输入”

Awe*_*ple 3 uitextfield ios swift

我需要显示“#”而不是项目符号密码字段中但由于 UITextField 中没有可用的默认选项。

我尝试在“shouldChangeCharactersInRange”中编写自定义逻辑中编写自定义逻辑 ,但是当用户从中间删除或添加任何特定字符时,我无法处理索引。

所以这是我的问题:- 1.我是否需要找到任何库 2.还有其他可用的默认选项吗?3. 需要为其编写自定义逻辑?如果是这样,我可以正确处理它“shouldChangeCharactersInRange”“textFieldDidChange”

Mr.*_*ean 6

  1. 不,您不需要为此逻辑找到任何第三方库
  2. 否,没有可满足您需求的默认选项
  3. 是的,您需要根据您的需求编写自定义逻辑,所以这里是......

    var passwordText = String()
    
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
    if textField == textFieldPassword {
    
        var hashPassword = String()
        let newChar = string.characters.first
        let offsetToUpdate = passwordText.index(passwordText.startIndex, offsetBy: range.location)
    
        if string == "" {
            passwordText.remove(at: offsetToUpdate)
            return true
        }
        else { passwordText.insert(newChar!, at: offsetToUpdate) }
    
        for _ in passwordText.characters {  hashPassword += "#" }
        textField.text = hashPassword
        return false
    }
    
    Run Code Online (Sandbox Code Playgroud)

斯威夫特 4:-

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    if textField == textFieldPassword {

        var hashPassword = String()
        let newChar = string.first
        let offsetToUpdate = passwordText.index(passwordText.startIndex, offsetBy: range.location)

        if string == "" {
            passwordText.remove(at: offsetToUpdate)
            return true
        }
        else { passwordText.insert(newChar!, at: offsetToUpdate) }

        for _ in 0..<passwordText.count {  hashPassword += "#" }
        textField.text = hashPassword
        return false
    }
    return true
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

3738 次

最近记录:

3 年,5 月 前