Swift 4.2 原生输入法中文限制字数

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
    }
}

你可能感兴趣的:(Swift 4.2 原生输入法中文限制字数)