Obj-C, iOS, как мне отформатировать UITextField для международной валюты?

#objective-c #ios #uitextfield

#objective-c #iOS #uitextfield

Вопрос:

Мне нужно отформатировать числовое значение в 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:@"."]) amp;amp; ((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;

}
  

Ответ №1:

 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];

NSString *currencyString = [formatter stringFromNumber:yourNumberHere];
  

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

  • (BOOL)Текстовое поле: (UITextField *)Текстовое поле должно изменять CHARACTERSINRANGE:(NSRange)диапазон replacementString: (NSString *)строка

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

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

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

Комментарии:

1. Да, смотрите мою правку, я могу обрабатывать US / UK, но евро вызывает у меня проблемы. Я хотел бы обойти свою проблему, можете ли вы предложить что-нибудь еще?

Ответ №2:

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

Комментарии:

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