2010-03-09 9 views
6

Tengo UITextfield donde un usuario puede poner un monto en dólares, me gustaría que el campo de texto siempre tenga el formato de dos decimales ($. ##). El formato debe mantenerse todo el tiempo. Pero estoy atascado en cómo agregar los números ingresados ​​a los existentes en el campo de texto?Formateo en tiempo real con NSNumberFormatter en un UITextfield

//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]; 
} 

Respuesta

2

Aquí es la idea ...

tienda el valor de cadena, anexe a ella, a continuación, el uso que de la operación.

definir un NSMutableString en el archivo .h

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

sintetizarla.

Entonces ...

- (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

tendrá que alloc/init storedValue en viewDidLoad y liberarlo dealloc. – Jordan

Cuestiones relacionadas