UITextField限制字数

背景: UITextField在中文九宫格键盘下会出现输入空格,具体代码如下

    @objc func textFieldChanged(textField:UITextField){
        let kMaxCount: Int = 8
        guard let text = textField.text else {
            return
        }
        // 高亮状态不计算长度
        if let selectedRange = textField.markedTextRange, let _: UITextPosition = textField.position(from: selectedRange.start, offset: 0) {
            return
        }
        else {
            if (text.count > kMaxCount) {
                textField.text = String(text.prefix(kMaxCount))
                MBProgressHUD.toast("最多输入8个字符", false)
            }
        }
    }

分析原因:
我们可以转换成utf8分析原因: 中文九宫格高亮状态会产生空格
textLength就是我们实际需要的字符串长度,但是九宫格状态输入时会出现空格,utf8是 -30,-128,-122,我们把这些过滤之后就得到了实际长度,但是实际限制长度的时候还是按照上面的方法进行

// 下面这段代码仅用于问题分析

        var textLength = text_result.count
        let str = textField.text?.cString(using: .utf8)
        print("str === \(String(describing: str)), \(String(describing: str?.count))")
        var list = [CChar]()
        if let charList = str {
            for char in charList {
                print("char == \(char)")
                // 中文状态下输入空格会出现 -30,-128,-122,要排除utf8为 -30,-128,-122 的影响,再计算长度
                if char != -30 && char != -128 && char != -122 {
                    list.append(char)
                }
            }
            textLength = list.count
        }

你可能感兴趣的:(UITextField限制字数)