Ho utilizzato questo protocollo / estensione in una delle mie app ed è un po 'più leggibile. Mi piace come riconosce i backspace e ti dice esplicitamente quando un carattere è un backspace.
Alcune cose da considerare:
1. Qualunque cosa implementi questa estensione del protocollo deve specificare un limite di caratteri. In genere sarà il tuo ViewController, ma potresti implementare il limite di caratteri come proprietà calcolata e restituire qualcos'altro, ad esempio un limite di caratteri su uno dei tuoi modelli.
2. Sarà necessario chiamare questo metodo all'interno del metodo delegato shouldChangeCharactersInRange del campo di testo. Altrimenti non sarai in grado di bloccare l'immissione di testo restituendo false, ecc.
3. Probabilmente vorrai consentire il passaggio dei caratteri backspace. Ecco perché ho aggiunto la funzione extra per rilevare i backspace. Il tuo metodo shouldChangeCharacters può verificarlo e restituire "true" all'inizio, in modo da consentire sempre i backspace.
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
}
}
Se qualcuno di voi è interessato, ho un repository Github in cui ho preso parte di questo comportamento con limite di caratteri e l'ho inserito in un framework iOS. C'è un protocollo che puoi implementare per ottenere una visualizzazione del limite di caratteri simile a Twitter che ti mostra quanto sei andato oltre il limite di caratteri.
CharacterLimited Framework su Github