我们开发的时候,产品经常会要求:详细描述,0/500字,当我们限制了字数的时候,假如我们输入了499个字,当用拼音输入最后一个字的时候,会发现不能输入,因为我们把拼音长度也算了进去,这个时候就需要特殊处理了。
首先,我们可以定义一个全局常量500:
static NSInteger MaxTVCount_500 = 500;
定义全局的textView和用于展示数字的numLab
@property (nonatomic,weak) UITextView *textView;
@property (nonatomic,weak) UILabel *numLab;
然后初始化一个UITextView和一个UILabel
UITextView *textView = [[UITextView alloc] init];
self.textView = textView;
textView.delegate = self;
[self.view addSubview:textView];
UILabel *numLab = [[UILabel alloc] init];
self.numLab = numLab;
[self.view addSubview:numLab];
具体的字数处理,就放在UITextViewDelegate里面处理了
- (void)textViewDidChange:(UITextView *)textView {
UITextRange *proRange = textView.markedTextRange;
UITextPosition *pos = [textView positionFromPosition:proRange.start offset:0];
if (proRange && pos) {
return;
}
NSUInteger count = textView.text.length;
if (count > MaxTVCount_500) {
NSRange rangeIndex = [textView.text rangeOfComposedCharacterSequenceAtIndex:MaxTVCount_500];
if (rangeIndex.length == 1) {
textView.text = [textView.text substringToIndex:MaxTVCount_500];
} else {
NSRange rangeRange = [textView.text rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MaxTVCount_500)];
textView.text = [textView.text substringWithRange:rangeRange];
}
self.numLab.text = [NSString stringWithFormat:@"%ld/%ld",MaxTVCount_500,MaxTVCount_500];
} else {
self.numLab.text = [NSString stringWithFormat:@"%ld/%ld",count,MaxTVCount_500];
}
}
如有不确定地方或者拓展或者问题,比如仿UITextField的PlaceHolder默认占位字,可在评论下方咨询
搞定!!!