iOS系统输入法限制输入字数的误区

以textField为例,通常在限制输入字数时,通过监听通知UITextFieldTextDidChangeNotification或者给textField添加事件addTarget,

addTarget
iOS系统输入法限制输入字数的误区_第1张图片
事件

这么写如果限制一两百字,可能没什么感觉,如果是限制几个字,就会出现下面这种情况

这里限制10个字的输入

iOS系统输入法限制输入字数的误区_第2张图片
按五次键盘

在不确定汉字的时候,也就是还没有点击候选汉字的时候,textField里是带有空格的,按五次此时的text.length已经是10了,继续再按键盘或者点击候选文字,textField里直接就会变成"a a a a a "这种带着空格的字母,这种情况要想正常输入,就得一个字一个字输入非常难操作,而且最后一个字保不准能不能输入进去.

一种比较正确的写法应该是:

iOS系统输入法限制输入字数的误区_第3张图片
正确的限制方法

分析下这段代码

markedTextRange是textField的属性,是输入时,等待转换汉字的那段选中字符,虽然也是蓝色选中,但是和selectedTextRange是不同的

这里newText就是那段蓝色选中的字符了,每次点按键盘都会走一次,newText都会增加一个字母,重点来了,当点击候选汉字时,会连续调用两次这个textFieldDidChange方法,第一次newText会变成转换的汉字字符串,第二次newText是空字符串.

于是只要newText是空的,就说明在添加汉字,至于输入英文,英文不会出现markedTextRange,因此也是正常起效的.

你可能感兴趣的:(iOS系统输入法限制输入字数的误区)