以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,因此也是正常起效的.
网友评论