[iOS]iOS7系统下multistage text input(中文输入法)下UITextView的内容长度限制(二)

前情描述

[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; 
    }
}

你可能感兴趣的:([iOS]iOS7系统下multistage text input(中文输入法)下UITextView的内容长度限制(二))