2011-08-12 9 views
0
내 응용 프로그램

의 UITextField 제한 - 아이폰

1.username 2.Email 4 텍스트 필드에 봉착

3.Age 4.Password

사용자 이름은 3-25 문자입니다 만이 포함 문자 [a-z0-9]

연령은 1-100 사이 여야합니다.

암호는 4-12 사이의 문자입니다 만 문자 [A-ZA-Z0-9]를 사용

나는 위의 요구 사항

와 텍스트 필드를 제한 할 수있는 방법을

사람이 이렇게 저를 도와주세요 ..

귀하의 노력과 배려에 감사드립니다.

답변

1

UITextFieldDelegate 프로토콜의 메서드를 사용하여 필드의 내용을 확인할 수 있습니다. 사용자가 텍스트 필드를 편집 종료 될 때, 당신은 단지 확인

- textField:shouldChangeCharactersInRange:replacementString: 

을 첫 번째 경우;

– textFieldShouldEndEditing: 
- textFieldShouldReturn: 

하거나 사용할 수 있습니다

더 구체적으로, 하나는 사용 두 번째 경우에는 각 키 입력에서 유효성 검사를 수행 할 수 있습니다. 당신은 -[UITextField textField:shouldChangeCharactersInRange:replacementString:] 방법을 구현하여 사용자 유형으로 번호를 확인 할 수

NSString* text = textField.text; 
NSUInterger length = [text length]; 
if (length.....) { 
// -- show alert or whatever 
return NO; 
} 
+0

:하지만 username-what에 대해 A-Z와 0-9 만 입력하면됩니까? – Prajan

+0

그것에 대해 'NSRegularExpression'을 사용하십시오. http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html – sergio

1

: 그 모든 방법에서

, 당신은 다음과 같이 액세스 할 수있는 인수 textField을받을 수 있습니다. 변경이 이루어지기 전에 전에이 메서드를 이라고 부릅니다. 따라서 사용자 동작의 결과 일 수있는 텍스트를 직접 만들어야합니다. 예 :

-(BOOL)textField:(UITextField*)textField: shouldChangeCharactersInRange:(NSRange*)range 
                 replacementString:(NSString*)string; 
{ 
    NSString* text = [textField.text stringByReplacingCharactersInRange:range 
                  withString:string]; 
    // text is now the potential string you should check against. 
} 

귀하가 취한 행동은 귀하의 책임입니다. 몇 가지 예는 다음과 같을 수 있습니다 더 복잡한 번호 확인을 위해 내가 범위 등을 검증하기위한 지원을하고있다가, NSNumberFormatter을 사용

// Too short? 
if ([text length] < 4) ... 

// Invalid character? 
NSCharacterSet* invalidChars = [[NSCharacterSet alphanumericCharacterSet] invertedSet]; 
if ([text rangeOfCharacterInSet:invalidChars].location != NSNotFound) ... 

.

+0

위의 코드는 오류를 표시합니다. 위치 선언되지 않음 – Prajan

0

UITextFieldDelegate를 사용하여 원하는대로 할 수 있습니다. - (void)viewDidLoad 방법의 각 필드에 대해 textfield.tag에 다른 값을 할당하고 해당 태그 값을 일치시켜 (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string의 관련 필드를 찾습니다.

#define USERNAME_FIELD_TAG 1 
#define PASSWORD_FIELD_TAG 2 
#define EMAIL_FIELD_TAG 3 
#define AGE_FIELD_TAG 4 

#pragma mark - UITextFieldDelegate 
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField.tab == USERNAME_FIELD_TAG) 
    { 
     if([[NSPredicate predicateWithFormat:@"SELF MATCHES[cd] %@", @"[a-z0-9]{3,35}"] evaluateWithObject:string] == FALSE) 
     { 
      textField.text = [textField.text stringByReplacingOccurrencesOfString:string withString:@"" options:NSCaseInsensitiveSearch range:range]; 
      [self selectTextForInput:textField atRange:range]; 
      return NO; 
     } 
    } 
    else if (textField.tab == PASSWORD_FIELD_TAG) 
    { 
     if([[NSPredicate predicateWithFormat:@"SELF MATCHES[cd] %@", @"[a-zA-Z0-9]{4,12}"] evaluateWithObject:string] == FALSE) 
     { 
      textField.text = [textField.text stringByReplacingOccurrencesOfString:string withString:@"" options:NSCaseInsensitiveSearch range:range]; 
      [self selectTextForInput:textField atRange:range]; 
      return NO; 
     } 
    } 
    else if (textField.tab == EMAIL_FIELD_TAG) 
    { 
     if([[NSPredicate predicateWithFormat:@"SELF MATCHES[cd] %@", @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"] evaluateWithObject:string] == FALSE) 
     { 
      textField.text = [textField.text stringByReplacingOccurrencesOfString:string withString:@"" options:NSCaseInsensitiveSearch range:range]; 
      [self selectTextForInput:textField atRange:range]; 
      return NO; 
     } 
    } 
    else if (textField.tab == AGE_FIELD_TAG) 
    { 
     if([[NSPredicate predicateWithFormat:@"SELF MATCHES[cd] %@", @"[1-100]"] evaluateWithObject:string] == FALSE) 
     { 
      textField.text = [textField.text stringByReplacingOccurrencesOfString:string withString:@"" options:NSCaseInsensitiveSearch range:range]; 
      [self selectTextForInput:textField atRange:range]; 
      return NO; 
     } 
    } 

    return YES; 
} 

// place the cursor at given possition 
-(void)selectTextForInput:(UITextField *)input atRange:(NSRange)range { 
    UITextPosition *start = [input positionFromPosition:[input beginningOfDocument] 
               offset:range.location]; 
    UITextPosition *end = [input positionFromPosition:start 
               offset:range.length]; 
    [input setSelectedTextRange:[input textRangeFromPosition:start toPosition:end]]; 
}