前情描述
[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系統(tǒng)中,粘貼完達到限制個數的字符個數后,可以退格刪除,再使用中文輸入法進行輸入,這時候進入multistage text input模式,會觸發(fā)的問題
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;
}
}