iOS UITextView字数限制 拼音

我们开发的时候,产品经常会要求:详细描述,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默认占位字,可在评论下方咨询

搞定!!!

你可能感兴趣的:(Objective-C)