UITextField 输入限制, UITextView 原理一样
// MARK: -- UITextFieldDelegate
extension LZViewController: UITextFieldDelegate {
/// return 键点击 called when 'return' key pressed. return NO to ignore.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//self.returnClick()
return true
}
/// return NO to not change text
/// - Parameters:
/// - textField: <#textField description#>
/// - range: UITextField控件中光标选中的字符串,即被替换的字符串;range.length为0时,表示在位置range.location插入string
/// - string: 替换字符串;string.length为0时,表示删除
/// - Returns: <#description#>
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let oldFieldText = textField.text ?? ""
let sRange = Range(range, in: oldFieldText)
var willNewFieldText = oldFieldText // 新字符串预计
if let sRange = sRange {
willNewFieldText = oldFieldText.replacingCharacters(in: sRange, with: string)
}
/// 实际新字符串
var newFieldText = oldFieldText
defer {//最后 判断
let newTextInt = Int(newFieldText) ?? 0
根据 新字符串 ,判断按钮状态
//self.confirmButton.isEnabled = (newTextInt > 0) && (newTextInt <= 99999)
}
// 检查是否是删除操作
if string == "" {
newFieldText = willNewFieldText
return true
}
// 新字符串长度 = 原来字符串长度 - 被替换字符串长度 + 新字符串长度
let newCount = (textField.text?.count ?? 0) - range.length + string.count
let isNum = string.isNum
if !isNum {
MBProgressHUDHelper.showWarning(text: "请输入数字")
newFieldText = oldFieldText
return false
}
// 限制输入5个字符 最大99999
if newCount > 5 {
newFieldText = oldFieldText
return false
}
newFieldText = willNewFieldText
return true
}
}