我們常常有需要限制輸入框文字長度的需求,比方說手機的 10 位號碼或是優惠碼 5 位英數字等等,不過 Apple 並沒有提供相關的 API 給我們直接使用。

這邊提供一個簡單的 extension 內嵌 maxLength 在 interface builder 上,下次拉一個 UITextField 再設定他的 maxLength 數值就可以輕鬆達到想要的效果

 

UIITextField Extension :

// Set textfield max length
private var __maxLengths = [UITextField: Int]()
extension UITextField {
@IBInspectable var maxLength: Int {
get {
guard let l = __maxLengths[self] else {
return Int.max // (global default-limit. or just, Int.max)
}
return l
}
set {
__maxLengths[self] = newValue
addTarget(self, action: #selector(fix), for: .editingChanged)
}
}
@objc func fix(textField: UITextField) {
let t = textField.text
textField.text = t?.safelyLimitedTo(length: maxLength)
}
}
extension String {
func safelyLimitedTo(length n: Int) -> String {
let c = self
if c.count <= n { return self }
return String(Array(c).prefix(upTo: n))
}
}