一、输入汉字时字数统计

开发中这样的需求也不少见,需要实时统计textView中输入的字数。 常规的做法就是设置textView的delegate,实现delegate中的

- (void)textViewDidChange:(UITextView *)textView

然后统计输入文字的个数。

NSInteger maxFontNum = 200;//最大输入限制
    NSString *toBeString = textView.text;
    // 获取键盘输入模式
    NSString *lang = [[UIApplication sharedApplication] textInputMode].primaryLanguage;
    if ([lang isEqualToString:@"zh-Hans"]) { // zh-Hans代表简体中文输入,包括简体拼音,健体五笔,简体手写
        UITextRange *selectedRange = [textView markedTextRange];
        //获取高亮部分
        UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
        if (!position) {
            if (toBeString.length > maxFontNum) {
                textView.text = [toBeString substringToIndex:maxFontNum];//超出限制则截取最大限制的文本
                self.remarksCountLabel.text = [NSString stringWithFormat:@"%ld/200",(long)maxFontNum];
            } else {
                self.remarksCountLabel.text = [NSString stringWithFormat:@"%lu/200",(unsigned long)toBeString.length];
            }
        }
    } else {// 中文输入法以外的直接统计
        if (toBeString.length > maxFontNum) {
            textView.text = [toBeString substringToIndex:maxFontNum];
            self.remarksCountLabel.text = [NSString stringWithFormat:@"%ld/200",(long)maxFontNum];
        } else {
            self.remarksCountLabel.text = [NSString stringWithFormat:@"%lu/200",(unsigned long)toBeString.length];
        }
    }

根据键盘类型进行判断,如果输入的是中文,则判断是否为高亮文字即连续输入的拼音,如果不是高亮的则直接进行字数统计,否则不作处理,这样就解决了字数统计的问题。

二、UITextView 动态高度

UITextView的动态高度,取决于输入字符的变化,因此我们可以还在

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

方法里处理该业务逻辑。

首先,我们需要将UITextView的scrollEnabled 设置为 NO,这样是为了解决文字换行的时候,文字整体上移然后回落这种不友好的体验。

CGSize textViewSize = [textView sizeThatFits:CGSizeMake(textView.frame.size.width, MAXFLOAT)];
CGRect frame = textView.frame;
frame.size.height = textViewSize.height;
textView.frame = frame;

你也可以使用autoLayout,不在赘述。

三、UITextView 内边距设置

    //内容缩进为零(去除左右边距)
    textView.textContainer.lineFragmentPadding = 0.0
    //去除上下边距
    textView.textContainerInset = UIEdgeInsetsZero

== 图片预览 ==
20180313204658273