不能退格后执行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 
     } 
    } 
}