UITextField 限制输入字符

使用UITextField的时候,一般都会限制字数。限制字数,听起来简单,实现起来却不简单。

如果输入的只是字母或者数字之类的,直接限制就行。要是输入中文等类似的,那就不行了

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldTextDidChanged:) name:UITextFieldTextDidChangeNotification object:nil];

1.纯字母和数字

- (void)textFieldTextDidChanged:(NSNotification *)noti {
   if (_textField.text.length > 10) {
     _textField.text = [_textField.text substringToIndex:10];
}

 2.有中文和日文等

- (void)textFieldTextDidChanged:(NSNotification *)noti {
   //中文算两个字符
   UITextField *textField = (UITextField *)noti.object;
   NSUInteger count = 0,index = 0;
   NSString *toBeString = textField.text;
   DDLogInfo(@"length = %lu(%d),text = (%s)%@",strlen([textField.text UTF8String]),textField.text.length,[textField.text UTF8String],textField.text);

   if (![[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString:@"en-US"]) {
     UITextRange *selectedRange = [textField markedTextRange];
     // 获取高亮部分
     UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
     // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
     if (!position) {
       for(int i=0; i<toBeString.length; i++){
         int num = [toBeString characterAtIndex:i];
         if( num < 127)
           count ++;
         else
           count += 2;
         if (count <= 10) {
           index = i;
         }
       }
     }
   } else {
     for(int i=0; i<toBeString.length; i++){
       int num = [toBeString characterAtIndex:i];
         if( num < 127)
           count ++;
         else
           count += 2;
       if (count <= 10) {
         index = i;
       }
     }
   }
   if (count > 10) {
     textField.text = [toBeString substringToIndex:index+1];
   }
}

 

posted on 2015-11-12 11:16  rgshio  阅读(287)  评论(0编辑  收藏  举报

导航