2012년 12월 3일 월요일

iOS 프로그래밍 팁 - UITextField로 전화번호 입력 받기


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

}

델리게이트 함수에

다음과 같은 코드가 필요하다.

3자가 넘어가면 - (대쉬) 추가
010-
또 8자가 넘어가면 (대쉬) 추가
010-674-

여기서 번호자리가 5자가 되면
가운데 3자리가 4자리가 되게

이거 그대로 코딩을 하면

NSString stringWithFormat:과

txtField setText:
를 이용하면 된다.

NSUInteger currentLength = textField.text.length;
        NSCharacterSet *numbers = [NSCharacterSet decimalDigitCharacterSet];
         
        if (range.length == 1) {
            return YES;
        }
        
        if ([numbers characterIsMember:[string characterAtIndex:0]]) {
           if ( currentLength == 3 ) {
                if (range.length != 1) {
                    NSString *firstThreeDigits = [textField.text substringWithRange:NSMakeRange(0, 3)];
                    NSString *updatedText;
                    
                    if ([string isEqualToString:@"-"]) {
                        updatedText = [NSString stringWithFormat:@"%@",firstThreeDigits];
                    } else {
                        updatedText = [NSString stringWithFormat:@"%@-",firstThreeDigits];
                    }
                    
                    [textField setText:updatedText];
                }
            } else if ( currentLength > 3 && currentLength < 8 ) {
                if ( range.length != 1 ) {
                    NSString *firstThree = [textField.text substringWithRange:NSMakeRange(0, 3)];
                    NSString *dash = [textField.text substringWithRange:NSMakeRange(3, 1)];
                    
                    NSUInteger newLenght = range.location - 4;
                    NSString *nextDigits = [textField.text substringWithRange:NSMakeRange(4, newLenght)];
                    NSString *updatedText = [NSString stringWithFormat:@"%@%@%@",firstThree,dash,nextDigits];
                    [textField setText:updatedText];
                }
            } else if ( currentLength == 8 ) {
                if ( range.length != 1 ) {
                    NSString *areaCode = [textField.text substringWithRange:NSMakeRange(0, 3)];
                    NSString *firstThree = [textField.text substringWithRange:NSMakeRange(4, 3)];
                    NSString *nextDigit = [textField.text substringWithRange:NSMakeRange(7, 1)];
                    [textField setText:[NSString stringWithFormat:@"%@-%@-%@",areaCode,firstThree,nextDigit]];
                }
            } else if ( currentLength == 12 ) {
                if ( range.length != 1 ) {
                    NSString *areaCode = [textField.text substringWithRange:NSMakeRange(0, 3)];
                    NSString *firstThree = [textField.text substringWithRange:NSMakeRange(4, 3)];
                    NSString *nextDigit = [textField.text substringWithRange:NSMakeRange(8, 1)];
                    NSString *nextDigit2 = [textField.text substringWithRange:NSMakeRange(9, 3)];
                    [textField setText:[NSString stringWithFormat:@"%@-%@%@-%@",areaCode,firstThree,nextDigit,nextDigit2]];
                }
            }
        } else {
            return NO;
        }
        return YES;

댓글 3개:

익명 :

감사합니다 시간 많이 아끼게 됐네요

sparrow :

도움이 되었다니 좋네요.

Unknown :

써본결과 하나의 단점이 있네요 중간부터 지우면 약간 로직이 꼬인다는 점?
찾아서 보수해보겠습니다.