iOS开发中UITextView使用小结

2021-10-09  本文已影响0人  奔跑的小蚂蚁_8b28

最近项目开发中用到了多行文本框限制文字输入个数限制,之前的话在textViewDidChange方法中截取超出字数就可以。测试人员发现在拼音转汉字的过程中,YYTextView不会二次确认textViewDidChange方法,输入字数只能最后确认结束弹框的时候计算,影响体验效果,后转用自己封装的继承UITextView替换。另外拼音转汉字的情况下,在输入文本中间一直输入,依然会出现输入字数计算不准确的问题。下面列出解决问题实现的代码。

image

pragma mark- UITextViewDelegate

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

[self.activityTextView resignFirstResponder];

}

-(void)updateSpeechButtonStatus{

if (self.activityTextView.text.length >= MAX_NUM) {

    self.btnSpeech.enabled = NO;

}else{

    self.btnSpeech.enabled = YES;

}

}

//动态显示可输入文本字数

-(void)changeTextNumber:(UITextView *)textView{

if (textView.text.length <= MAX_NUM) {

    self.numLabel.text = [NSString stringWithFormat:@"%lu/%lu",(unsigned long)textView.text.length,(MAX_NUM - textView.text.length)];

}else{

    self.numLabel.text = [NSString stringWithFormat:@"%@/%@",[NSString stringWithFormat:@"%d",MAX_NUM],@"0"];

}

}

-(void)textViewDidChange:(UITextView *)textView{

UITextRange *selectedRange = [textView markedTextRange];

//获取高亮部分

UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];

//如果是拼音转汉语状态不统计字数,确认输入后统计

if (selectedRange && pos) {

    return;

}

[self changeTextNumber:textView];

[self updateSpeechButtonStatus];

}

-(void)textViewDidEndEditing:(UITextView *)textView{

textView.text = [EaseEmoji stringReplaceEmoji:textView.text];

[self changeTextNumber:textView];

[self updateSpeechButtonStatus];

}

{

BOOL isLimit = [CCCommonAPI textViewTextCountLimit:textView range:range text:text maxCount:[NSString stringWithFormat:@"%d",MAX_NUM] isAllowEmoji:YES completeBlock:^{

    //执行这里block的时候不执行textViewDidChange,block里面的内容就是textViewDidChange里面的操作

    [self changeTextNumber:textView];

    [self updateSpeechButtonStatus];

}];

return isLimit;

}

//textview字数限制处理

}

上一篇 下一篇

猜你喜欢

热点阅读