He estado usando este protocolo / extensión en una de mis aplicaciones, y es un poco más legible. Me gusta cómo reconoce los espacios de retroceso y te dice explícitamente cuándo un personaje es un espacio de retroceso.
Algunas cosas a considerar:
1. Lo que implemente esta extensión de protocolo debe especificar un límite de caracteres. Por lo general, ese será su ViewController, pero podría implementar el límite de caracteres como una propiedad calculada y devolver algo más, por ejemplo, un límite de caracteres en uno de sus modelos.
2. Deberá llamar a este método dentro del método de delegado shouldChangeCharactersInRange de su campo de texto. De lo contrario, no podrá bloquear la entrada de texto devolviendo falso, etc.
3. Probablemente desee permitir el paso de los caracteres de retroceso. Es por eso que agregué la función adicional para detectar espacios de retroceso. Su método shouldChangeCharacters puede verificar esto y devolver "verdadero" desde el principio para que siempre permita espacios atrás.
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 alguno de ustedes está interesado, tengo un repositorio de Github donde tomé parte de este comportamiento de límite de caracteres y lo puse en un marco de iOS. Hay un protocolo que puede implementar para obtener una pantalla de límite de caracteres similar a Twitter que le muestra qué tan lejos ha superado el límite de caracteres.
Marco de CharacterLimited en Github