有许多时候都有这种需求,那就是限制字数操作。
在没有一套好的方法之前,比如textView的限制方法就是利用代理方法
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if (textView.text.length >= number) {
textView.text = [textView.text substringToIndex:number];
return NO;
}else {
return YES;
}
}
可这种普遍的方式绝逼有问题,单纯的英文还好说。可是你在使用拼音就会出现问题。那就是后面的时候你想输入发现都输入不上去。但是根据连锁出来的词语却还能直接点上去。
所以,不能让用户连拼音都打不出来,就只能限制输入成功之后的字数咯。
故,那就在每当text改变时去判断字数就可以了。
textView 有代理方法 - (void)textViewDidChange:(UITextView *)textView可以实时的监听text内容变化,而 textFiled 却没有,但是 @interface UITextField : UIControl <UITextInput, NSCoding>
所以可以添加监听
[valueField addTarget:self action:@selector(changeText:) forControlEvents:UIControlEventEditingChanged];
所以不管是代理方法还是自己实现的监听(textView代理实现大同小异),内容就可以去判断字数了:
- (void)changeText:(UITextField *)sender
{
bool isChinese;//判断当前输入法是否是中文
if ([[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString: @"en-US"]) {
isChinese = false;
}
else
{
isChinese = true;
}
NSInteger number = 0; //需要限制的字数
if (sender.tag == 30000) {
number = 5;
}else if (sender.tag == 30001)
{
number = 11;
}
if(sender.tag == 30000) {
// number位
NSString *str = [[sender text] stringByReplacingOccurrencesOfString:@"?" withString:@""];
if (isChinese) { //中文输入法下
UITextRange *selectedRange = [sender markedTextRange];
//获取高亮部分
UITextPosition *position = [sender positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
NSLog(@"汉字");
if ( str.length>=number + 1) {
NSString *strNew = [NSString stringWithString:str];
[sender setText:[strNew substringToIndex:number]];
}
}
else
{
NSLog(@"输入的英文还没有转化为汉字的状态");
}
}else{
NSLog(@"str=%@; 本次长度=%lu",str,(unsigned long)[str length]);
if ([str length]>=number + 1) {
NSString *strNew = [NSString stringWithString:str];
[sender setText:[strNew substringToIndex:number]];
}
}
}
}
UITextField && UITextView 限制限制字数做法
原文地址:http://blog.csdn.net/wq5201314o/article/details/44923875