对textView 的输入个数进行判断

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

{
     /*
     if ([text isEqualToString:@"\n"])
     {
         [textView resignFirstResponder]; return NO;
     }else if([textView.text length] >= 30 && ![text isEqualToString:@""]){
         return NO;
     }
     
     return YES;
      */
//    return YES;
     int _textMaxLength = 6 0 ;
     if (_textMaxLength == 0 ) {
         return YES ;
     }
     
     void (^dealWithTexts)( void ) = ^() {
         NSString *textInField = [textView .text substringToIndex :range .location ];
         int inputedHanzi = [[textInField componentsMatchedByRegex : @"[\u4e00-\u9fa5]" ] count ];
         int inputedLength = textInField .length + inputedHanzi;
         int allowedLength = _textMaxLength - inputedLength;
         int length = 0 ;
         int stop = text .length ;
         for ( int i = 0 ; i < text .length ; i++) {
             NSString *c = [text substringWithRange :NSMakeRange(i, 1 )];
             if ([c isMatchedByRegex : @"[\u4e00-\u9fa5]" ]) {
                 if (length + 2 > allowedLength) { stop = i; break; }
                 length += 2 ;
             } else {
                 if (length + 1 > allowedLength) { stop = i; break; }
                 length++;
             }
         }
         NSString *shouldAddedString = [text substringToIndex :stop];
         NSString *textShouldInField = [ NSString stringWithFormat : @"%@%@" ,textInField,shouldAddedString];
         [textView performSelector : @selector (setText:) withObject :textShouldInField afterDelay : 0 .0 ];
     };
     
     if ( 1 == range .length && text .length == 0 )
  {
   return YES ; //删除
  }
     else if (range .length > 1 ) {
         dealWithTexts();
         return YES ;
     }
  else
  {
   NSString * text 2 = [textView .text stringByReplacingCharactersInRange :range withString :text];
         text 2 = [text 2 stringByReplacingOccurrencesOfRegex : @"[\u4e00-\u9fa5]" withString : @"##" ];
         int symbol = [[text 2 componentsMatchedByRegex : @"\u2006" ] count ];
   if ( _textMaxLength > 0 && text 2 .length - symbol > _textMaxLength )
   {
             if (text .length > 1 ) {
                 dealWithTexts();
                 return YES ;
             }
    return NO ;
   }
   return YES ;
  }
}

你可能感兴趣的:(textview)