码迷,mamicode.com
首页 > 其他好文 > 详细

分享一个字数限制和统计的UITextView分类方法

时间:2016-05-06 12:02:51      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

- (NSUInteger)letterCountWithLimits:(NSInteger)limits {
    NSString *toBeString = self.text;
    NSUInteger txtCount = toBeString.length;

    UITextRange *selectedRange = [self markedTextRange];
    //获取高亮部分
    UITextPosition *position = [self positionFromPosition:selectedRange.start offset:0];
    
    // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
    if (!position) {
        if (toBeString.length > limits) {
            
            self.text = [toBeString substringToIndex:limits];
        }
    }
    
    // 有高亮选择的字符串,去掉高亮的字数
    else{
        NSInteger startOffset = [self offsetFromPosition:self.beginningOfDocument toPosition:selectedRange.start];
        NSInteger endOffset = [self offsetFromPosition:self.beginningOfDocument toPosition:selectedRange.end];
        NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
        
        // 去掉高亮的字数
        txtCount -= offsetRange.length;
    }
    
    // 超出部分警告和限制
    if (txtCount > limits) {
        self.text = [toBeString substringToIndex:limits];
        return limits;
    }
    return txtCount;
}

- (void)textViewDidChange:(UITextView *)textView 中调用该方法即可,返回值是当前字数。

markedTextRange, 去掉高亮的字数,对于中文是需要做这样的处理的。

不足的地方在于对\n只看成一个字,以及许多emoji会认为是两个字。

分享一个字数限制和统计的UITextView分类方法

标签:

原文地址:http://www.cnblogs.com/moona/p/5465073.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!