UITextField字數限制
首先實作UITextFieldDelegate
然後再使用
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {}
三個參數分別代表:
textField = 可以知道是哪個textField,也可以取到textField的值textField.text
range = 要被替換的字符的範圍
string = 最新輸入的字串
回傳 true 代表可繼續輸入 ; false則不能繼續輸入
這個方法就是只要textField有輸入或刪除動作等變動的情形就會觸發,所以其實這裡可以做的不止是字數的限制,也可以做輸入英文、數字、或特殊符號的限制
以下為限制最大字數為20程式碼
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { guard let text = textField.text else { return true } let count = text.count + string.count - range.length return count <= 20}
這樣確實是可以達成目的,但是只適用於畫面上只有一個textField,因為上面這段是會影響全部的textField,例如有三個textField:
textField1 輸入了6位數
textField2 輸入了20位數
這時候會造成textField3無法在輸入任何東西,因為textField2輸入了我們限制的最大位數20位
所以我更改了一下程式碼為以下
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == passwordTxt {
if let text = passwordTxt.text {
let count = text.count + string.count — range.length
return count <= 20
}
} else if textField == rePasswordTxt {
if let text = rePasswordTxt.text {
let count = text.count + string.count — range.length
return count <= 20
}
} else {
return true
}
return true
}
這樣是可以分辨是哪個textField,但好像只適用於較少textField時 XD
得等有較多時間實在來想想其他方式,有更好的方式也請跟我分享唷~