美文网首页
UITextView 字数限制

UITextView 字数限制

作者: zhu哥哥 | 来源:发表于2019-04-13 10:49 被阅读0次

- (void)textViewDidChange:(UITextView *)textView {
    NSString *lang = [[textView textInputMode] primaryLanguage]; // 键盘输入模式
    if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
        UITextRange *selectedRange = [textView markedTextRange];
        //获取高亮部分
        UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
        if (!position) {
            if (textView.text.length > self.maxNumber) {
                textView.text = [textView.text substringToIndex:self.maxNumber];
            }
            if (self.inputTextCount) {
                self.inputTextCount(textView.text.length);
            }
        } else {
            // 有高亮选择的字符串,则暂不对文字进行统计和限制
        }
    } else { // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
        if (textView.text.length > self.maxNumber) {
            textView.text = [textView.text substringToIndex:self.maxNumber];
        }
        if (self.inputTextCount) {
            self.inputTextCount(textView.text.length);
        }
    }
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if ([self isText:textView beyondLimit:self.maxNumber] && [text length] > 0) {
        return NO;
    }
    return YES;
}

- (BOOL)isText:(UITextView *)tv beyondLimit:(int)maxLimit{
    NSString *lang = [[tv textInputMode] primaryLanguage];
    if ([lang isEqualToString:@"zh-Hans"]) {
        UITextRange *selectedRange = [tv markedTextRange];
        UITextPosition *position = [tv positionFromPosition:selectedRange.start offset:0];
        if (!position) {
            if (tv.text.length > maxLimit) {
                return YES;
            }
        }
    } else {
        if (tv.text.length > maxLimit) {
            return YES;
        }
    }
    
    return NO;
}



行数限制

- (void)textViewDidChange:(UITextView *)textView {
    if (self.numberOfLines != NSIntegerMax && !_isDelete) {
        float limitHeight = self.font.lineHeight * self.numberOfLines ;
        if ([self getTextContentSize].height > limitHeight) {
            while ([self getTextContentSize].height > limitHeight) {
                self.text = [self.text substringToIndex:self.text.length - 1];
            }
        }
    }
}

- (CGSize)getTextContentSize {
    return [self getStringPlaceSize:self.text textFont:self.font bundingSize:CGSizeMake(self.contentSize.width-10, CGFLOAT_MAX)];
}
- (CGSize)getStringPlaceSize:(NSString *)string textFont:(UIFont *)font bundingSize:(CGSize)boundSize {
    //计算文本高度
    NSDictionary *attribute = @{NSFontAttributeName:font};
    NSStringDrawingOptions option = (NSStringDrawingOptions)(NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading);
    CGSize size = [string boundingRectWithSize:boundSize options:option attributes:attribute context:nil].size;
    return size;
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if ([self isText:textView beyondLimit:self.maxNumber] && [text length] > 0) {
        return NO;
    }
    self.isDelete = text.length == 0;
    return YES;
}



相关文章

  • UITextField与UITextView字数限制

    文章结构 1.UITextField字数限制2.UITextView字数限制 一、UITextField字数限制 ...

  • UITextView 字数限制

    以下讨论的都是在 iOS 8.0 以上,iOS 7 的系统占用率比较低,而且有一些比较奇怪的特性,就不在此讨论了。...

  • UITextView 字数限制

    行数限制

  • UItextview字数限制

    functextViewDidChange(_textView:UITextView) { iftextV...

  • UITextField和UITextView限制输入字数的方法

    1、UITextField限制输入字数的方法 2、UITextView限制输入字数的方法

  • iOS UITextView详解

    iOS UITextView详解 之前看到很多好朋友问到UITextView限制字数,或者限制成只输入数字等,接下...

  • iOS UITextView详解

    iOS UITextView详解 之前看到很多好朋友问到UITextView限制字数,或者限制成只输入数字等,接下...

  • UITextView实现字数限制

    UITextView使用相对较少,研究了下发现代理方法并不多,算是简单控件了。这里针对字数限制功能的开发稍作总结:

  • UITextView限制输入字数

    需求 输入框限制字数需求下来 想参考一些资源 结果 觉得都不太能满足咱这需求 只能自己写了想了想 需求清晰 思路也...

  • UITextView字数限制设置

    根据网上其他的设置方法发现,当使用中文输入法时,还处于高亮状态未选择时,依旧会将高亮状态的文字计算为已输入的文字,...

网友评论

      本文标题:UITextView 字数限制

      本文链接:https://www.haomeiwen.com/subject/mtllwqtx.html