iOS 原生输入法中文限制字数 Swift 4.2
由于iOS 原生中文输入法, 拼音也会占用总字数, 普通限制对中文不太实用, 所以写此博客方便以后查阅, 已经供大家参考
全部实用代理完成
直接上代码
let k_input_text_max_length = 50
// MARK: - UITextViewDelegate
extension CustomViewController: UITextViewDelegate {
/// 自定义了 textview , 创建 lable 当做 placeholder 实用
func textViewDidChange(_ textView: UITextView) {
mInputeView.mPlaceholder.isHidden = textView.text.length > 0
/// iOS 原生输入法, 中文输入法, 特殊处理, 输入框中的拼音不计入字数
if let language = textView.textInputMode?.primaryLanguage, language.hasPrefix("zh") {
/// 有拼音存在, 不更新字数
guard textView.markedTextRange == nil else { return }
/// 无拼音存在, 截取总字数, 更新 indicator
if textView.text.length > k_input_text_max_length {
textView.text = textView.text.substring(from: 0, length: k_input_text_max_length)
}
/// 更新总字数
mInputeView.mCountLabel.text = "\(textView.text.length)/\(k_input_text_max_length)"
return
}
/// 其他输入法更新总字数
mInputeView.mCountLabel.text = "\(textView.text.length)/\(k_input_text_max_length)"
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
/// 删除符号
if text == "" {
return true
}
/// 最多支持三个换行符
if textView.text.ranges(of: "\n").count == 3 && text == "\n" {
return false
}
/// iOS 原生中文输入法
if let language = textView.textInputMode?.primaryLanguage, language.hasPrefix("zh") {
/// 有拼音
if let range = textView.markedTextRange {
/// 刚输入拼音的时候总字数
let start = textView.offset(from: textView.beginningOfDocument, to: range.start)
return start <= k_input_text_max_length
} else {
/// 无拼音
return textView.text.length + text.length <= k_input_text_max_length
}
}
/// 非中文输入
return textView.text.length + text.length <= k_input_text_max_length
}
}