实现以下两个 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]; } }
|
注意,这两个代理方法必须都实现。
如果只实现第一个代理方法,则会出现一个问题:到达字数限制时,用键盘的确已无法输入进去,但可以通过点击键盘上方的联想字词继续输入进去,导致超过限制。通过实现第二个代理方法,可把通过联想或其他方式输入进去的多余字符截掉。这也是之前我没有注意到的一点。
如果只实现第二个代理方法,虽然长度不会超过限制,但实际相当于先输入进去,后再截掉,导致按下键盘后虽然没有输入进去字符,但键盘上方的联想字词在不断地根据你的按键而联想。