以下讨论的都是在 iOS 8.0 以上,iOS 7 的系统占用率比较低,而且有一些比较奇怪的特性,就不在此讨论了。
很多APP对于输入字符都有限制,如微博会对当前输入的字符进行统计,还会根据不同的用户角色设置不同的字数上线,根据需求,在UITextView的Delegate 方法里可以在
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
里进行检测,判断是否超出字数上限,但是当使用中文联想输入字符时,在iOS 9 及以下版本,点击中文联想字符推荐的词组,不会调用该方法,所以我们决定在
- (void)textViewDidChange:(UITextView *)textView;
进行判断,在该方法里,也要注意的是在进行字符数量限制时,应该防止把高亮的部分,即联想输入的部分记入到字数统计中,因为这部分不是我们真正要输入的内容。具体判断逻辑如下:
if (textView.text.length > MAX_COUNT && textView.markedTextRange == nil) {
// 限制字符的操作
// 1. 不让用户继续输入 textView.text=[textView.text substringToIndex:MAX_COUNT];
// 2. 禁止发布按钮,或者提示字数标红。
}