2016-06-10 2 views
-1

지역 번호와 3 자리 이후에 대시를 추가하는 전화 번호 형식의 앱이 있습니다. 문제는 사용하는 데이터가 미리 포맷되어 있지 않다는 것입니다. 따라서 앱이 처음 시작되면 텍스트 필드에 누군가가 입력 할 때까지 전화 번호가 서식이 지정되지 않은 것처럼 보입니다.사용자가 텍스트를 입력 할 때뿐만 아니라 앱 초기화시 shouldChangeCharactersInRange를 호출하십시오.

사용자가 입력 할 때 &의 응용 프로그램 초기화시 shouldChangeCharactersInRange의 기능을 확장하는 방법이 있습니까? 여기

내 shouldChangeCharactersInRange입니다 :

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField == _phoneNumber.tf) 
    { 
     NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 
     NSArray *components = [newString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]; 
     NSString *decimalString = [components componentsJoinedByString:@""]; 

     NSUInteger length = decimalString.length; 
     //BOOL hasLeadingOne = length > 0 && [decimalString characterAtIndex:0] == '1'; 


     if (textField.text.length > 11 && range.length == 0) 
     { 
      return NO; // Change not allowed 
     } 
     else 
     { 
      //if (length == 0 || (length > 9 && !hasLeadingOne) || (length > 10)) 
      if (length == 0 || (length > 10)) 
      { 
       textField.text = decimalString; 
       return NO; 
      } 

      NSUInteger index = 0; 
      NSMutableString* formattedString = [NSMutableString string]; 

      if (length - index > 3) 
      { 
       NSString *areaCode = [decimalString substringWithRange:NSMakeRange(index, 3)]; 
       [formattedString appendFormat:@"%@-",areaCode]; 
       index += 3; 
      } 

      if (length - index > 3) 
      { 
       NSString *prefix = [decimalString substringWithRange:NSMakeRange(index, 3)]; 
       [formattedString appendFormat:@"%@-",prefix]; 
       index += 3; 
      } 

      NSString *remainder = [decimalString substringFromIndex:index]; 
      [formattedString appendString:remainder]; 

      textField.text = formattedString; 
      //NSLog(@"** Formatted Phone: %@", formattedString); 

      numLength = formattedString.length; // 12 Characters including dashes 
      //NSLog(@"** Formatted Length: %lu", (unsigned long)numLength); 
     } 


     return NO; 
    } 

    return YES; 
} 

답변

2

대신 textField.text의 문자열 매개 변수에 행동 수정, 자신의 방법으로 평가를 수행하는 논리를 추출, 모두이 방법에서와에서 호출하여 초기화.

관련 문제