Używałem tego protokołu / rozszerzenia w jednej z moich aplikacji i jest trochę bardziej czytelny. Podoba mi się, jak rozpoznaje backspace i wyraźnie mówi ci, kiedy znak jest backspace.
Kilka kwestii do rozważenia:
Cokolwiek implementuje to rozszerzenie protokołu, musi określić limit znaków.Zwykle będzie to Twój ViewController, ale możesz zaimplementować limit znaków jako właściwość obliczoną i zwrócić coś innego, na przykład limit znaków w jednym z modeli.
2. Będziesz musiał wywołać tę metodę wewnątrz metody delegata shouldChangeCharactersInRange pola tekstowego. W przeciwnym razie nie będziesz w stanie zablokować wprowadzania tekstu, zwracając fałsz itp.
3. Prawdopodobnie będziesz chciał przepuścić znaki Backspace. Dlatego dodałem dodatkową funkcję do wykrywania backspace. Twoja metoda shouldChangeCharacters może to sprawdzić i wcześnie zwrócić wartość „true”, więc zawsze zezwalasz na cofanie.
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
}
}
Jeśli ktoś z was jest zainteresowany, mam repozytorium Github, w którym wykorzystałem niektóre z tego zachowania limitu znaków i umieściłem w strukturze iOS. Istnieje protokół, który możesz zaimplementować, aby uzyskać wyświetlacz limitu znaków podobny do Twittera, który pokazuje, jak daleko przekroczyłeś limit znaków.
CharacterLimited Framework w serwisie Github