UITextField和UITextView正确限制输入字符长度,中文汉字预输入正确处理方式
程序员文章站
2024-02-26 10:35:40
...
一般而言,字符串输入长度限制,在要求不是很高的情况下,直接在textField或textView的didEndEditing方法中进行提示和文字截取,即可满足开发的需要;
对于需要在输入过程中限制字符串输入长度的情况下,则只能在textDidChange中处理,然而直接在这里限制也还是会有限制不完美的问题,即在输入中文时,存在预录入中文汉字的问题,这时候如果直接进行限制,则会在你输入时,当输入的拼音字符满足限制条件的情况下就会直接提示限制文字。 为了解决这个问题,因此需要对预录入文字进行相应的处理。
处理步骤:
1. 在适当的地方添加textDidChange的通知
NotificationCenter.default.addObserver(self, selector: #selector(textDidChanged), name: UITextField.textDidChangeNotification, object: textField)
2. 在通知中进行字符限制处理
let textfield = textField as! UITextField
//获取当前键盘输入的语言
let lang = textField.textInputMode?.primaryLanguage
//为汉字输入时,特别处理
if lang == "zh-Hans" {
let range = textfield.markedTextRange
if range == nil {
if (textfield.text?.count)! >= length {
textfield.text = String((textfield.text?.prefix(length))!)
}
}
} else {
if (textfield.text?.count)! >= length {
textfield.text = String((textfield.text?.prefix(length))!)
}
}
3. 在适当的地方移除通知监听
NotificationCenter.default.removeObserver(self)
以上是以UITextField为例, UITextView的处理方式一样。
上一篇: 统计单词长度
下一篇: JS、JAVA判断获取字符长度