1

사용자가 텍스트 필드에 금액을 입력하고 값을 입력 할 때 서식을 지정하기를 원합니다. 즉, 사용자가 네 번째 숫자를 입력 할 때 수천을 나타내는 적절한 자리에 쉼표가 나타납니다. 예 : 3,450사용자가 입력하는 동안 텍스트 필드 서식 지정

지금 당장 텍스트 필드 대리자 메서드 "shouldChangeCharactersInRange"및 NSNumberFormatter를 사용하려고합니다. 불행히도 저는 어떤 성공도하지 못했습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있을까요? 고맙습니다!

+0

죄송합니다. 알려 줘서 고마워. 나는 전체 포인트 시스템이 어떻게 작동했는지 확신 할 수 없었다. 팁을 주신 덕분에 – serge2487

답변

4

하나의 옵션은 UITextField 위에 투명한 배경으로 UILabel을 오버레이하는 것입니다. UITextFielddelegate로 등록하고 구현 :

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

그런 때마다,이 방법을 사용하면 새 값을 정수로 변환하고 NSNumberFormatter를 통해 통과 할 수 있도록 호출 될 사용자 유형 이 형식의 값을 표시하도록 UILabel을 업데이트하십시오.

static NSNumberFormatter *formatter; 

- (BOOL)textField:(UITextField *)aTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSString *textFieldValue = [aTextField.text stringByAppendingString:string]; 

    if (range.length > 0) 
     textFieldValue = [aTextField.text substringToIndex:range.location]; 

    if ([textFieldValue isEqualToString:@""]) 
     self.formattedLabel.text = textFieldValue; 
    else 
    { 
     NSDecimalNumber *newValue = [[NSDecimalNumber alloc] initWithString:textFieldValue]; 
     if (!formatter) formatter = [[NSNumberFormatter alloc] init]; 
     formatter.numberStyle = NSNumberFormatterDecimalStyle; 
     self.formattedLabel.text = [formatter stringFromNumber:newValue]; 
    } 

    return YES; 
} 
+0

! 정수 대신 NSDecimalNumber를 사용해 보았습니다. 그러나 레이블은 한 자리 뒤에 있습니다. 따라서 텍스트 필드를 클릭하고 "3"을 입력하면 레이블에 "NaN"이 표시됩니다. 그리고 "4"를 입력하면 $ 3.00 등이 표시됩니다 ... 어떻게 수정합니까? "NaN입니까? 보이지 않는 레이블을 사용하는 것보다 다른 방법이 있습니까? 감사합니다. – serge2487

+0

'string 'textField.text' 대신에 인수를 사용합니다. 예제를 업데이트했습니다 .NaN은 숫자가 아닙니다. –

+0

hmmm 참고. 내 textField는 한 번에 한 문자 씩 표시하며, 삭제를 시작할 때마다 NaN을 얻습니다. – serge2487

관련 문제