将 UITextField 限制应用于本地保存的 UITextField 文本
Apply UITextField restrictions to locally saved UITextField text
我们有一个拥有一定数量用户的实时应用程序。
在即将到来的更新中,我们需要添加名称和姓氏输入限制(少于 25 个字符并且没有空格、数字等)
这是我的做法:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == surnameTextField, textField == nameTextField {
let currentText = textField.text ?? ""
guard let stringRange = Range(range, in: currentText) else { return false }
let updatedText = currentText.replacingCharacters(in: stringRange, with: string)
let allowedCharacters = CharacterSet.letters
let finalCaracterSet = CharacterSet(charactersIn: updatedText)
return updatedText.count <= 25 && allowedCharacters.isSuperset(of: finalCaracterSet)
}
return true
}
除一件事外,一切都按预期工作。
如果我们已经有用户,他们的 names/surnames 中有数字或符号怎么办? (用户数据存储在本地)?他们将无法更改 name/surname。
如何让现有用户在此更新后编辑他们的凭据?
例如,在 Emma_Lew name 的情况下,上面的代码将始终 return false,因为 allowedCharacters.isSuperset(of: finalCaracterSet)
是 false(包含下划线)。
您不必在最终字符集中添加整个文本,只需添加新字符串即可获得所需的结果。
用以下代码替换您的代码
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == surnameTextField, textField == nameTextField {
let currentText = textField.text ?? ""
guard let stringRange = Range(range, in: currentText) else { return false }
let updatedText = currentText.replacingCharacters(in: stringRange, with: string)
let allowedCharacters = CharacterSet.letters
let finalCaracterSet = CharacterSet(charactersIn: string)
return updatedText.count <= 25 && allowedCharacters.isSuperset(of: finalCaracterSet)
}
return true
}
我们有一个拥有一定数量用户的实时应用程序。 在即将到来的更新中,我们需要添加名称和姓氏输入限制(少于 25 个字符并且没有空格、数字等)
这是我的做法:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == surnameTextField, textField == nameTextField {
let currentText = textField.text ?? ""
guard let stringRange = Range(range, in: currentText) else { return false }
let updatedText = currentText.replacingCharacters(in: stringRange, with: string)
let allowedCharacters = CharacterSet.letters
let finalCaracterSet = CharacterSet(charactersIn: updatedText)
return updatedText.count <= 25 && allowedCharacters.isSuperset(of: finalCaracterSet)
}
return true
}
除一件事外,一切都按预期工作。 如果我们已经有用户,他们的 names/surnames 中有数字或符号怎么办? (用户数据存储在本地)?他们将无法更改 name/surname。
如何让现有用户在此更新后编辑他们的凭据?
例如,在 Emma_Lew name 的情况下,上面的代码将始终 return false,因为 allowedCharacters.isSuperset(of: finalCaracterSet)
是 false(包含下划线)。
您不必在最终字符集中添加整个文本,只需添加新字符串即可获得所需的结果。
用以下代码替换您的代码
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == surnameTextField, textField == nameTextField {
let currentText = textField.text ?? ""
guard let stringRange = Range(range, in: currentText) else { return false }
let updatedText = currentText.replacingCharacters(in: stringRange, with: string)
let allowedCharacters = CharacterSet.letters
let finalCaracterSet = CharacterSet(charactersIn: string)
return updatedText.count <= 25 && allowedCharacters.isSuperset(of: finalCaracterSet)
}
return true
}