不能退格后执行textFieldShouldReplaceCharactersInRange
问题描述:
我有一个设置视图,其中包含一些textFields,如用户的名字和姓氏。我想确保用户不能输入除字母之外的其他任何内容。经过一番研究,我发现实现这一点的最佳方法是使用textFieldShouldReplaceCharactersInRange委托方法。代码我似乎工作只允许他们输入字母,但它不会让我退格。我已经阅读了该方法的苹果文档,但我很难把握它。如果可以用更加愉快的友好方式来解释这一点,那将是非常好的,并解释为什么退出不被允许会很好,所以我可以真正理解。我的代码如下不能退格后执行textFieldShouldReplaceCharactersInRange
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == firstNameTextField {
let allowedCharacter = NSCharacterSet.letters
let replacementTextHasRightCharacters = string.rangeOfCharacter(from: allowedCharacter as CharacterSet)
if replacementTextHasRightCharacters == nil {
return false
} else {
return true
}
}
return true
}
答
你并不需要使用该功能。只要创建一个目标运行每文本字段改变时间:
textField.addTarget(self, action: #selector(YourViewController.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged)
然后创建一个被调用的函数:
func textFieldDidChange(textField: UITextField) {
let letters = CharacterSet.letters
for letter in textField.text!.unicodeScalars {
if letters.contains(letter) {
// is a letter
} else {
// not a letter
}
}
}