侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

UITextFiled、UITextView按字节限制输入长度

2024-05-08 星期三 / 0 评论 / 0 点赞 / 68 阅读 / 4305 字

作为一个纯粹的弱鸡&菜B,百度了好几番,找到的都是按字符串长度限制的,我想难道这样不行?就打开其它App看了他们设置个性签名的地方,好多都是限制的字符串的length,最后我去看了QQ,发现是按字节数


作为一个纯粹的弱鸡&菜B,百度了好几番,找到的都是按字符串长度限制的,我想难道这样不行?就打开其它App看了他们设置个性签名的地方,好多都是限制的字符串的length,最后我去看了QQ,发现是按字节数限制的,于是准备尝试看下自己能不能编造一个差不多效果的方法,主要参考了这两篇博客:

http://www.jianshu.com/p/2d1c06f2dfa4

http://www.jb51.net/article/79250.htm

然后得到了初始版本:


-(void)textFiledValueChanged:(UITextField *)text {    NSInteger byte = 12;    NSString * string = text.text;    NSInteger  len = [[NSString stringWithCString:[string UTF8String] encoding:NSUTF8StringEncoding] lengthOfBytesUsingEncoding:NSUTF8StringEncoding];    if(len > byte)    {        do        {            string = [string substringToIndex:string.length -1];                   } while ([[NSString stringWithCString:[string UTF8String] encoding:NSUTF8StringEncoding] lengthOfBytesUsingEncoding:NSUTF8StringEncoding] > byte);    }    text.text = string;}

我测试一次limit = 4;一次输入五个汉字,只显示了4个汉字在textFiled中,再也输不进去了,当我输入全英文的时候,输入了12个英文字母,我很嗨皮!但是当我把limit = 40的时候发现问题了,第一次输入汉字没问题,第二次在输入的时候,它会把拼音和出来的汉字都加到textFiled中,崩溃~~~~~怀着无奈于不甘继续改吧改吧........

 

得到最终可行版本:


  • 因为UITextFiledDelegate没有其内容改变的回调,所以监控其值的改变:
UITextField * content = [[UITextField alloc]init];[content addTarget:self action:@selector(textFiledValueChanged:) forControlEvents:UIControlEventAllEditingEvents];
  • 实现回调方法:
-(void)textFiledValueChanged:(UITextField *)text{    NSInteger  limit = 30;  //字节数    UITextRange *selectedRange = [text markedTextRange];    UITextPosition *position = [text positionFromPosition:selectedRange.start offset:0];    if (!position)    {        NSString * string = text.text;        NSInteger  len = [[NSString stringWithCString:[string UTF8String] encoding:NSUTF8StringEncoding] lengthOfBytesUsingEncoding:NSUTF8StringEncoding];        if(len > limit)        {            do            {                string = [string substringToIndex:string.length -1];            } while ([[NSString stringWithCString:[string UTF8String] encoding:NSUTF8StringEncoding] lengthOfBytesUsingEncoding:NSUTF8StringEncoding] > limit);        }        text.text = string;    }}
  • UITextViewDelegate本身具有-(void)textViewDidChange:(UITextView *)text;只需要实现其回调方法即可:
-(void)textViewDidChange:(UITextView *)text{    NSInteger limit = 48;    UITextRange *selectedRange = [text markedTextRange];    UITextPosition *position = [text positionFromPosition:selectedRange.start offset:0];    if (!position)    {        NSString * string = text.text;        NSInteger  len = [[NSString stringWithCString:[string UTF8String] encoding:NSUTF8StringEncoding] lengthOfBytesUsingEncoding:NSUTF8StringEncoding];        if(len > limit)        {            do            {                string = [string substringToIndex:string.length -1];            } while ([[NSString stringWithCString:[string UTF8String] encoding:NSUTF8StringEncoding] lengthOfBytesUsingEncoding:NSUTF8StringEncoding] > limit);        }        text.text = string;    }}

PS:原创博文,觉得有帮助的可以点赞!^_^

 

广告 广告

评论区