作为一个纯粹的弱鸡&菜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:原创博文,觉得有帮助的可以点赞!^_^