2012-04-05 3 views
0

I UITextField für lokales Währungssymbol und Komma, mit folgendem Link am Customizing:Customizing UITextField für Währungsformat auch mit iOS 4.x funktioniert, aber in iOS 5 gibt null

http://www.thepensiveprogrammer.com/2010/03/customizing-uitextfield-formatting-for.html

NSNumber *actualNumber = [currencyFormatter numberFromString:[mstring 
             stringByReplacingOccurrencesOfString:localeSeparator withString:@""]]; 

In iOS 5 diese tatsächliche Zahl ist immer null und in iOS 4.x es funktioniert gut

Hauptmethode Mein Code ist für diesen Zweck ist:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField.tag == 1) 
    { 
     if(true) 
     { 
      NSMutableString* mstring = [[textField text] mutableCopy]; 
      if([mstring length] == 0) 
      { 
       //special case...nothing in the field yet, so set a currency symbol first 
       [mstring appendString:[[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]]; 

       //now append the replacement string 
       [mstring appendString:string]; 
      } 
      else 
      { 
       //adding a char or deleting? 
       if([string length] > 0) 
       { 
        [mstring insertString:string atIndex:range.location]; 
       } 
       else 
       { 
        //delete case - the length of replacement string is zero for a delete 
        [mstring deleteCharactersInRange:range]; 
       } 
      } 

      NSString* localeSeparator = [[NSLocale currentLocale] 
             objectForKey:NSLocaleGroupingSeparator]; 

      NSNumber *actualNumber = [currencyFormatter numberFromString:[mstring 
                    stringByReplacingOccurrencesOfString:localeSeparator 
                    withString:@""]]; 
      NSLog(@"%@",actualNumber); 

      [textField setText:[currencyFormatter stringFromNumber:actualNumber]]; 

      [mstring release]; 
     } 

     //always return no since we are manually changing the text field 
     return NO; 
    } 
    else 
    { 
     return YES; 
    } 
} 

und das ist die Initialisierung

NSLocale *paklocal = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_PAK"] autorelease]; 
currencyFormatter = [[NSNumberFormatter alloc] init]; 
[currencyFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4]; 
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[currencyFormatter setMaximumFractionDigits:0]; 
[currencyFormatter setLocale:paklocal]; 

NSMutableCharacterSet *numberSet = [[NSCharacterSet decimalDigitCharacterSet] mutableCopy]; 
[numberSet formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]]; 
nonNumberSet = [[numberSet invertedSet] retain]; 
[numberSet release]; 

Antwort

2

Ich denke, Sie ein Problem sind, die da textField:shouldChangeCharactersInRange:replacementString: das Währungssymbol für [NSLocale currentLocale] fügt hinzu, die von der locale von currencyFormatter verwendet verschieden sein können. Im Simulator auf meinem Computer fügte er $ (Dollar) -Zeichen zu mstring hinzu, die logisch von währungsFormatter zurückgewiesen wurden.

Wenn Sie paklocal konstruieren, speichern Sie es zusammen mit currencyFormatter und verwenden Sie es anstelle von [NSLocale currentLocale]. Wenn Sie weitere Probleme mit currencyFormatter haben, verwenden Sie NSLog, um die von Ihnen gesendete Zeichenfolge anzuzeigen.

+0

Dank Dondragmer –

Verwandte Themen