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
}