UITextView、UITextField在使用iOS原生键盘输入中文会有个蛋疼的问题,下面我举个开发中遇到的例子,同时也给自己做个笔记。
假如一个UITextView,设定最大输入长度是5,当用户将键盘调成输入中文,如图所示,当用户已经输入了饿f f
这个时候用户继续输入一个f
,请看断点,饿f f
length是4,接收一个f
,长度是5,shouldChangeTextInRange
这个代理方法return yes,表示可以接受本次输入的f
,
到此,以上看起来都完全符合科学,下面即将出现蛋疼的问题,请关注textViewDidChange
方法,此方法是成功接收了输入的字符串后才会调用的,这里有个蛋疼的问题,饿f f
在这个基础上,由于iOS原生键盘输入中文的时候,有联想功能,并且预先将拼音写入textView,苹果在接收最后输入的f
的时候,同时自动在饿f f
后面补了个空格,导致长度变成了6,超过了我想要的最大限度长度
目前这个我的解决方法就是在textViewDidChange
代理方法中强制截取了一下,虽然满足了业务需求,但是总感觉不科学。如果哪位大神有更好的方案,求指点,互相学习。