Obj-C, iOS, как мне отформатировать UITextField для международной валюты? - PullRequest
1 голос
/ 01 мая 2011

Мне нужно отформатировать числовое значение в UITextField, которое будет форматироваться при вводе числа.Мне нужно это значение для международного форматирования цены в зависимости от настройки валюты телефона.

Справка!

Редактировать, это то, что у меня есть на данный момент, и это работает в США и Великобританиино вызывает у меня проблемы с другими валютами, такими как евро.

+(NSString*)addFormatPrice:(double)dblPrice {   
  NSNumber *temp = [NSNumber numberWithDouble:dblPrice];
  NSDecimalNumber *someAmount = [NSDecimalNumber decimalNumberWithDecimal:
    [temp decimalValue]];   
  NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] 
    autorelease];
  [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];    
  return [currencyFormatter stringFromNumber:someAmount];
}

+(double)removeFormatPrice:(NSString *)strPrice {   
  NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] 
    autorelease];
  [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
  NSNumber* number = [currencyFormatter numberFromString:strPrice];
  return [number doubleValue];
}

.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:
    (NSRange)range replacementString:(NSString *)string {
  double currentValue = [General removeFormatPrice:textField.text];
  double cents = round(currentValue * 100.0f);

  if (([string isEqualToString:@"."]) && ((int)currentValue == 0)) {
    cents = floor(cents * 100);
  } else if ([string length]) {
    for (size_t i = 0; i < [string length]; i++) {
        unichar c = [string characterAtIndex:i];
        if (isnumber(c)) {
            cents *= 10;
            cents += c - '0'; 
        }            
    }
  } else {
    // back Space
    cents = floor(cents / 10);
  }

  NSString *str = [NSString stringWithFormat:@"%f", cents];
  if ([str length] > 15) {
    NSString *newStr = [str substringFromIndex:1];
    cents = [newStr doubleValue];
  }

  textField.text = [General addFormatPrice:[[NSString 
    stringWithFormat:@"%.2f", cents / 100.0f] doubleValue]];

  return NO;

}

Ответы [ 2 ]

4 голосов
/ 01 мая 2011
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];

NSString *currencyString = [formatter stringFromNumber:yourNumberHere];

Вы убьете себя, пытаясь исправить это, вводя его для любой валюты Вам придется использовать метод делегата UITextField

  • (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) диапазон replaceString: (NSString *) строка

для перехвата изменений, затем попытайтесь преобразовать новую строку обратно в число, используя средство форматирования. Но это может не сработать, если они делают что-то, что сбивает с толку синтаксический анализ, например, удаляет символ валюты или пропускает запятую.

Итак, вам нужно будет попытаться разобрать номер вручную для всех валют.

Гораздо проще, если вы просто отключите форматирование валюты во время редактирования, а затем отформатируйте результат, когда все будет готово.

3 голосов
/ 01 мая 2011

Использовать NSNumberFormatter .Использование NSNumberFormatterCurrencyStyle установит форматирование в текущую локаль.Вы также можете изменить локаль на что-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...