2010-03-09 5 views
6

사용자가 1 달러를 사용할 수있는 UITextfield가 있습니다. 텍스트 필드는 항상 2 자리 ($. ##)로 포맷해야합니다. 서식은 항상 유지되어야합니다. 하지만 텍스트 필드에 입력 된 숫자를 기존 문자에 추가하는 방법에 대해 고민 중입니까?UITextfield에서 NSNumberFormatter로 실시간 서식 지정

//This delegate is called everytime a character is inserted in an UITextfield. 
- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if ([textField tag] == amountTag) 
    { 

     NSString *amount = string; 

//How do I append the already entered numbers in the textfield to the new entered values ? 
//?? 

     //Get new formatted value 
     NSString *newAmount = [self formatCurrencyValue:[amount doubleValue]]; 

     [textField setText:[NSString stringWithFormat:@"%@",newAmount]]; 

     return NO; 
    } 

    //Returning yes allows the entered chars to be processed 
    return YES; 
} 


-(NSString*) formatCurrencyValue:(double)value 
{ 
    NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init]autorelease]; 
    [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
    [numberFormatter setCurrencySymbol:@"$"]; 
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 

    NSNumber *c = [NSNumber numberWithFloat:value]; 
    return [numberFormatter stringFromNumber:c]; 
} 

답변

2

다음은 다음 작업에 그것을 사용, 여기에 추가, 저장

... 문자열 값 아이디어입니다.

NSMutableString *storedValue; 
@property (nonatomic, retain) NSMutableString *storedValue; 

이를 합성하여 .H 파일에서 인 NSMutableString을 정의합니다.

그런 다음 이렇게 ...

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if ([textField tag] == amountTag) 
    { 
    [storedValue appendString:string]; 
    NSString *newAmount = [self formatCurrencyValue:([storedValue doubleValue]/100)]; 

    [textField setText:[NSString stringWithFormat:@"%@",newAmount]]; 
    return NO; 
    } 

    //Returning yes allows the entered chars to be processed 
    return YES; 
} 
+1

이있는 viewDidLoad에 storedValue 초기화/ALLOC하고 할당 해제 해제해야합니다. – Jordan