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
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,269评论 4 61
  • 宝剑二:和平(Peace) 本质:头脑的和平,让命运发生 想的太多所以才有困惑,不知道怎么去区别事情的重要顺序,总...
    XiXi花开见喜阅读 435评论 0 0
  • 灵感来自知乎答主分享,侵删 老幺醒来时,窗外已经没有一丝亮光了。昨天晚上又熬夜加班肝了一张工图,宛如喝了三提红混白...
    拓书成池阅读 223评论 0 1
  • 1.往前走一步退半步,再走一步退半步,有成长就是在前进。坚持下去总会到达终点。 2.今天解决了50件事情,实际发生...
    lucky0718阅读 195评论 0 0
  • 少帅回到自己房间的时候,艾米刚刚醒来正准备起床。那慵懒曼妙的姿态和迷人的胴体再次点燃了少帅的欲望,于是可怜的艾米刚...
    阿斯顿老马阅读 575评论 7 17