在一些场景中,须要限制用户的输入字数,例如在textField里进行控制(textView也相似,崩溃缘由也相同),如图所示ios
系统会监听文本输入,须要注意的第一点是输入法处于联想输入还未肯定提交的时候,对于第三方输入法例如搜狗,联想状态下的输入,是监听不到,除非点击肯定输入到textField,才会触发changed事件。优化
但对于系统键盘,联想状态下的输入也会监听,这里若是不处理就容易发生崩溃,例如当快要达到字数限制时,继续输入,此时textField.text =联想输入文字+textField已有文字,当textField.text超过字数限制时,就会截取限长部分赋值给textField.text,但这时输入数据还没提交,textField.text不容许改变,因而冲突产生,继而致使崩溃。在iOS八、9没有崩溃的缘由估计是系统作了优化处理,达到字数限制时,自动将限制范围内的联想文字肯定输入到textField中。spa
解决办法是判断一下markedTextRange是否为nil,即没有联想状态或高亮状态下的文字时,再进行文字限长检查或赋值blog