Tôi đã sử dụng giao thức / tiện ích mở rộng này trong một trong các ứng dụng của mình và nó dễ đọc hơn một chút. Tôi thích cách nó nhận ra các khoảng trống và cho bạn biết một cách rõ ràng khi một ký tự là một dấu lùi.
Một số điều cần xem xét:
1. Bất cứ thứ gì triển khai phần mở rộng giao thức này đều cần chỉ định giới hạn ký tự. Đó thường sẽ là ViewController của bạn, nhưng bạn có thể triển khai giới hạn ký tự như một thuộc tính được tính toán và trả về một cái gì đó khác, ví dụ: giới hạn ký tự trên một trong các mô hình của bạn.
2. Bạn sẽ cần gọi phương thức này bên trong phương thức ủy nhiệm shouldChangeCharactersInRange của trường văn bản. Nếu không, bạn sẽ không thể chặn mục nhập văn bản bằng cách trả về false, v.v.
3. Bạn có thể sẽ muốn cho phép các ký tự xóa lùi thông qua. Đó là lý do tại sao tôi đã thêm chức năng bổ sung để phát hiện khoảng cách ngược. Phương thức shouldChangeCharacters của bạn có thể kiểm tra điều này và trả về 'true' ngay từ sớm để bạn luôn cho phép các khoảng cách ngược.
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
}
}
Nếu bất kỳ ai trong số các bạn quan tâm, tôi có một repo Github, nơi tôi đã thực hiện một số hành vi giới hạn ký tự này và đưa vào một khuôn khổ iOS. Có một giao thức bạn có thể triển khai để hiển thị giới hạn ký tự giống như Twitter cho bạn biết bạn đã vượt quá giới hạn ký tự bao xa.
CharacterLimited Framework trên Github