UITextField九宫格键盘无法输入等问题

625 阅读1分钟

1.九宫格键盘输入问题

发现所有键盘都正常,九宫格键盘死活无反应,后来才发现是输入时加入了规则判定,然后检查字符串发现键盘上传过来的字符为实心数 字,所以无法输入

中文九宫格输入值为特殊字符

"➋➌➍➎➏➐➑➒"

所以在做输入校验的时候需要增加以上特殊字符的校验

2.输入最大位数后 不能删除

if let length = textField.text?.length, length < range.location + range.length {
            return false
        }

3.输入的文字上提示no replacements found

在UITextField输入框中输入字母单击时会提示未找到替换文本的提示;起初以为是系统提示没在意,后期测试时发现这个提示出现后无法点击移动光标位置了;这是个bug !

 textField.autocorrectionType = .no
 textField.spellCheckingType = .no

4.中文键盘输入字母导致的问题

获取textFiled的值的时候,英文,数字键盘是没有问题的,假如输入的是abcd,获取的值是abcd,但是,如果利用中文键盘的时候,问题就来了,同样输入abcd,没有点击键盘上的确定直接提交或者点击按钮下一步动作时,获取到的却是a b c d ,字符之间出现了空格。

一开始一直在想把空格用replacingCharacters方法过滤掉,但是不起作用。 后面打印一下发现f<0x2006>fg

空格的unicode编码是0020,但是我们复制出来的空格unicode编码是2006,这就是问题所在了,系统键盘输入时,空格不是空格而是特殊字符。

最终方案:在正则里面添加了允许输入这种空格\u2006

记录下最终代码,(2-12位字符,中文+数字+字母,不包含特殊符号)

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

        if let length = textField.text?.length, length < range.location + range.length {

            return false

        }

        let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)

        let expression = "^[a-zA-Z0-9\\u4e00-\\u9fa5-\\u2006-➋➌➍➎➏➐➑➒]{0,12}$"

        do {

            let regex = try NSRegularExpression(pattern: expression, options: NSRegularExpression.Options.allowCommentsAndWhitespace)

            let numberOfMatches = regex.numberOfMatches(in: newString, options: NSRegularExpression.MatchingOptions.reportProgress, range: NSMakeRange(0, (newString as NSString).length))

            return numberOfMatches != 0

        } catch {

        }

        return true

    }