前情描述
[iOS]UITextView限制字数的写法(一)
需要在iOSApp中完成一个限制字符个数60个的textView编辑框,一般实现的方式是
- (void)textViewDidChange:(UITextView *)textView
{
if ([textView.text length] > 60)
{
textView.text = [textView.text substringWithRange:NSMakeRange(0, 60)];
[textView.undoManager removeAllActions];
[textView becomeFirstResponder];
return;
}
}
遇到的问题
但是在iOS7系统中,粘贴完达到限制个数的字符个数后,可以退格删除,再使用中文输入法进行输入,这时候进入multistage text input模式,会触发的问题
Terminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray replaceObjectsInRange:withObject:length:: Out of bounds'
解决方案
由于中文输入法的键盘上有联想、推荐的功能,所以可能导致文本内容长度上有些不符合预期,导致越界,所以可以参考�以下做下处理:
添加textView.markedTextRange == nil
联想提示条的判断
- (void)textViewDidChange:(UITextView *)textView
{
if (textView.markedTextRange == nil && [textView.text length] > 60)
{
textView.text = [textView.text substringWithRange:NSMakeRange(0, 60)];
[textView.undoManager removeAllActions];
[textView becomeFirstResponder];
return;
}
}