最近做的app因為涉及到適配iOS7測試階段遇到了很多的bug,不得不說iOS7適配非常的坑爹,其中UITextView限制輸入字符在iOS7中非常特殊,高版本限制字符代碼如下:
- (void)textViewDidChange:(UITextView *)textView1 {
NSInteger number = [textView1.text length];
NSInteger maxLength = 30;
if (textView1.text.length > maxLength) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"字符個數不能大于30" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil];
alert.tag = 100;
[alert show];
textView1.text = [textView.text substringToIndex:30];
number = 30;
}
}
這段代碼在高版本機器上測試沒問題,但是一旦在iOS7上運行時就會報錯:
Terminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray replaceObjectsInRange:withObject:length:: Out of bounds'
github上查閱資料找到了一種解決辦法,通用iOS7以上所有系統版本:
- (void)textViewDidChange:(UITextView *)textView1 {
NSInteger number = [textView1.text length];
NSInteger maxLength = 30;
if (textView1.markedTextRange == nil && textView1.text.length > maxLength) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"字符個數不能大于30" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil];
alert.tag = 100;
[alert show];
textView1.text = [textView.text substringToIndex:30];
number = 30;
}
}