iOS输入框字数限制,需要注意判断高亮状态,否则加入需要限制输入10个字,在输入9个字之后,再次使用系统拼音键盘就输入不了了。输入的拼音会被截取。正确做法如下:
UITextfield
nickNameTextfield.addTarget(self, action: #selector(nickNameValueChanged), for: .editingChanged)
@objc func nickNameValueChanged() {
guard let text = nickNameTextfield.text else {
return
}
// 判断是否存在高亮字符,如果有,则不进行字数统计和字符串截断
if let selectedRange = nickNameTextfield.markedTextRange {
let position = nickNameTextfield.position(from: selectedRange.start, offset: 0)
if position != nil {
return
}
}
if text.count > 12 {
nickNameTextfield.text = text.substring(to: 12)
}
}
UITextView
textView和textfield类似,只是不需要添加通知,直接使用代理方法判断即可。
/// 限制输入字数
func textViewDidChange(_ textView: UITextView) {
// 判断是否存在高亮字符,如果有,则不进行字数统计和字符串截断
if let selectedRange = textView.markedTextRange {
let position = textView.position(from: selectedRange.start, offset: 0)
if position != nil {
return
}
}
if let text = textView.text, text.count > 12 {
textView.text = text.substring(to: 12)
}
}
网友评论