前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UITextView字数限制

UITextView字数限制

作者头像
王大锤
发布2018-05-17 12:13:37
2.4K0
发布2018-05-17 12:13:37
举报
文章被收录于专栏:王大锤

经常做,经常忘,记下来,以后好直接拷贝。

开始使用如下方法做限制

代码语言:javascript
复制
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@""] && range.length > 0) {
        //删除字符肯定是安全的
        return YES;
    }
    else {
        if (textView.text.length - range.length + text.length > 300) {
            [FXAlertTool alertWithMessage:@"超出字数限制" target:self];
            return NO;
        }
        else {
            return YES;
        }
    }
}

问题是使用中文输入法,最后一个字不能输入,总是提示超出字数限制,因为输入拼音的时候就开始计算文本长度。所以做了优化,以下方法可以直接拷贝粘贴使用。注意:没有处理表情!

代码语言:javascript
复制
- (void)textViewDidChange:(UITextView *)textView {
    int maxLimit = 300;
    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 > maxLimit) {
                textView.text = [textView.text substringToIndex:maxLimit];
                [FXAlertTool alertWithMessage:@"超出字数限制" target:self];
            }
        } else {
            // 有高亮选择的字符串,则暂不对文字进行统计和限制
        }
    } else { // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
        if (textView.text.length > maxLimit) {
            textView.text = [textView.text substringToIndex:maxLimit];
            [FXAlertTool alertWithMessage:@"超出字数限制" target:self];
        }
    }
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    int maxLimit = 300;
    if ([self isText:textView beyondLimit:maxLimit] && [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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档