J'utilise ce protocole / extension dans l'une de mes applications, et c'est un peu plus lisible. J'aime la façon dont il reconnaît les espaces arrière et vous indique explicitement quand un personnage est un retour arrière.
Quelques points à considérer:
Tout ce qui implémente cette extension de protocole doit spécifier une limite de caractères. Ce sera généralement votre ViewController, mais vous pouvez implémenter une limite de caractères en tant que propriété calculée et renvoyer quelque chose d'autre, par exemple une limite de caractères sur l'un de vos modèles.
2. Vous devrez appeler cette méthode à l'intérieur de la méthode de délégué shouldChangeCharactersInRange de votre champ de texte. Sinon, vous ne pourrez pas bloquer la saisie de texte en renvoyant false, etc.
3. Vous souhaiterez probablement autoriser les caractères de retour arrière. C'est pourquoi j'ai ajouté la fonction supplémentaire pour détecter les backspaces. Votre méthode shouldChangeCharacters peut vérifier cela et renvoyer «true» dès le début afin que vous autorisiez toujours les espaces arrière.
protocol TextEntryCharacterLimited{
var characterLimit:Int { get }
}
extension TextEntryCharacterLimited{
func charactersInTextField(textField:UITextField, willNotExceedCharacterLimitWithReplacementString string:String, range:NSRange) -> Bool{
let startingLength = textField.text?.characters.count ?? 0
let lengthToAdd = string.characters.count
let lengthToReplace = range.length
let newLength = startingLength + lengthToAdd - lengthToReplace
return newLength <= characterLimit
}
func stringIsBackspaceWith(string:String, inRange range:NSRange) -> Bool{
if range.length == 1 && string.characters.count == 0 { return true }
return false
}
}
Si l'un d'entre vous est intéressé, j'ai un repo Github dans lequel j'ai pris une partie de ce comportement de limite de caractère et mis dans un cadre iOS. Il existe un protocole que vous pouvez implémenter pour obtenir un affichage de la limite de caractères de type Twitter qui vous montre jusqu'où vous êtes allé au-dessus de la limite de caractères.
CharacterLimited Framework sur Github