限制 UITextView 最大输入字符数

实现以下两个 UITextView 的代理方法即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
#define LENGTH_LIMIT 10
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if (textView.text.length >= LENGTH_LIMIT && text.length > 0) {
return NO;
}
return YES;
}
-(void)textViewDidChange:(UITextView *)textView {
if (textView.text.length > LENGTH_LIMIT) {
textView.text = [textView.text substringToIndex:LENGTH_LIMIT];
}
}

注意,这两个代理方法必须都实现。

如果只实现第一个代理方法,则会出现一个问题:到达字数限制时,用键盘的确已无法输入进去,但可以通过点击键盘上方的联想字词继续输入进去,导致超过限制。通过实现第二个代理方法,可把通过联想或其他方式输入进去的多余字符截掉。这也是之前我没有注意到的一点。

如果只实现第二个代理方法,虽然长度不会超过限制,但实际相当于先输入进去,后再截掉,导致按下键盘后虽然没有输入进去字符,但键盘上方的联想字词在不断地根据你的按键而联想。