关于textview的限制文本字数的问题会汇总

1.首先,我们来看看最初的设计。

//限制字符长度
-(BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
    if (range.location>= 200)
    {
        return  NO;
    }
    else
    {
        return YES;
    }
}

直接对range的location进行判断。那这个range的location 是光标所在的位置嘛。如果把光标移到textview 的前端,那就可以输入很多个字符。

2.再来看改了之后:

//限制字符长度
-(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 > 10) {//至于这个range.length是0而已,也无需加上。
            return NO;
        }
        else {
            return YES;
        }
    }

}

这样写也是有问题的,一个是不能对联想输入做处理,二是不能对复制粘贴做精确的处理。当进行复制粘贴时,text大于10,那text还是无法加入到textView.text中来。

3.看下面这样的代码

//限制字符长度

-(BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{

    if ([text isEqualToString:@""] && range.length > 0)

    {     return YES;

    }//为什么需要加上yes.为了防止bug.删除不了的现象。

    else

    {

        NSString *str = [NSString stringWithFormat:@"%@%@", textView.text, text];

        if (str.length > BOOKMARK_WORD_LIMIT)

        {

            textView.text = [str substringToIndex:BOOKMARK_WORD_LIMIT];

            return NO;

        }

        else

        {

            return YES;

        }

    }

}


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


  //该判断用于联想输入

    if (textView.text.length > BOOKMARK_WORD_LIMIT)

    {

        textView.text = [textView.text substringToIndex:BOOKMARK_WORD_LIMIT];

    }  


}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值