Я использовал этот протокол / расширение в одном из своих приложений, и он стал немного более читаемым. Мне нравится, как он распознает пробелы и явно сообщает вам, когда символ является пробелом.
Что следует учитывать:
1. Независимо от того, что реализует это расширение протокола, необходимо указать ограничение на количество символов. Обычно это будет ваш ViewController, но вы можете реализовать ограничение на количество символов как вычисляемое свойство и вернуть что-то еще, например ограничение на количество символов для одной из ваших моделей.
2. Вам нужно будет вызвать этот метод внутри метода делегата shouldChangeCharactersInRange текстового поля. В противном случае вы не сможете заблокировать ввод текста, вернув false и т. Д.
3. Возможно, вы захотите пропустить символы возврата. Вот почему я добавил дополнительную функцию для обнаружения пробелов. Ваш метод shouldChangeCharacters может проверить это и на раннем этапе вернуть true, поэтому вы всегда разрешаете возврат.
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
}
}
Если кому-то из вас интересно, у меня есть репозиторий Github, где я взял некоторые из этих ограничений на количество символов и поместил их в платформу iOS. Существует протокол, который вы можете реализовать, чтобы получить отображение предельного количества символов в стиле Twitter, которое показывает, насколько вы далеко превысили лимит символов.
CharacterLimited Framework на Github