Ich habe dieses Protokoll / diese Erweiterung in einer meiner Apps verwendet und es ist etwas besser lesbar. Mir gefällt, wie es Backspaces erkennt und Ihnen explizit sagt, wann ein Zeichen ein Backspace ist.
Einige Dinge zu beachten:
1.Was auch immer diese Protokollerweiterung implementiert, muss eine Zeichenbeschränkung angeben. Dies ist normalerweise Ihr ViewController. Sie können jedoch die Zeichenbeschränkung als berechnete Eigenschaft implementieren und etwas anderes zurückgeben, z. B. eine Zeichenbeschränkung für eines Ihrer Modelle.
2. Sie müssen diese Methode innerhalb der delegierten Methode shouldChangeCharactersInRange Ihres Textfelds aufrufen. Andernfalls können Sie die Texteingabe nicht blockieren, indem Sie false usw. zurückgeben.
3. Sie möchten wahrscheinlich Rücktaste durchlassen. Aus diesem Grund habe ich die zusätzliche Funktion zum Erkennen von Backspaces hinzugefügt. Ihre shouldChangeCharacters-Methode kann dies überprüfen und frühzeitig 'true' zurückgeben, sodass Sie immer Backspaces zulassen.
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
}
}
Wenn einer von Ihnen interessiert ist, habe ich ein Github-Repo, in dem ich einige dieser Zeichenbeschränkungsverhaltensweisen übernommen und in ein iOS-Framework integriert habe. Es gibt ein Protokoll, das Sie implementieren können, um eine Twitter-ähnliche Anzeige für die Zeichenbegrenzung zu erhalten, die anzeigt, wie weit Sie die Zeichenbegrenzung überschritten haben.
CharacterLimited Framework auf Github