美文网首页
Swift 4.2 原生输入法中文限制字数

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

作者: CeeYang | 来源:发表于2019-03-07 16:27 被阅读0次

    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 原生输入法中文限制字数

          本文链接:https://www.haomeiwen.com/subject/sxfhpqtx.html