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

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

addTarget
事件

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

这里限制10个字的输入

按五次键盘

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

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

正确的限制方法

分析下这段代码

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

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

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

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

推荐阅读更多精彩内容