您的位置:首页 > 其它

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

2015-10-09 16:40 519 查看
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];
    }  

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: