iOS Возвращаемое значение из строки NSNumberFormatter - PullRequest
0 голосов
/ 11 февраля 2012

Я использую следующий код для преобразования введенного числа в текстовое поле, которое необходимо отформатировать для отображения валюты USD. Таким образом, он показывает знак $ и для каждых 3 цифр (справа) добавляется a. Я устанавливаю форматированный текст в текстовом поле.

- (void)textFieldDidEndEditing:(UITextField *)textField
{
   NSString *pureNumbers = [[textField.text componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

    //Convert entered text to NSNumber
    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber * myNumber = [f numberFromString:pureNumbers];

    NSString *currencyString = [currencyFormatter internationalCurrencySymbol]; 

    NSString *format = [currencyFormatter positiveFormat];
    format = [format stringByReplacingOccurrencesOfString:@"*" withString:currencyString];
    // ¤ is a placeholder for the currency symbol
    [currencyFormatter setPositiveFormat:format];

    NSString *currencyString1 = [currencyFormatter stringFromNumber:myNumber];

    NSLog(@"Text is %@",currencyString1);

    textField.text = currencyString1;
}

Теперь, как я могу вернуть введенный номер, удалив форматтер чисел? Пример: Я ввел 5000 в текстовое поле. Его форматируется до 5000 долларов в текстовом поле. Я хочу получить обратно «5000» из текстового поля, которое является исходным значением, введенным пользователем.

Ответы [ 2 ]

1 голос
/ 11 февраля 2012

Я предполагаю, что вы скопировали и вставили большую часть своей функции форматирования откуда-то, а не написали ее самостоятельно, потому что она уже содержит код для этого. В первой строке вы говорите:

NSString *pureNumbers = [[textField.text componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

Это берет строку и удаляет любые нечисловые символы. Так что это уже делает именно то, что вы хотите. Например. если вы скажете

NSString *pureNumbers = [@"$5,000" componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

Строка pureNumbers теперь равна @ "5000". Чтобы преобразовать это в числовое значение, с которым вы действительно можете выполнять математику, вы можете сказать:

double number = [pureNumbers doubleValue];
0 голосов
/ 11 февраля 2012

Вы можете использовать leftView свойство UITextField:

  UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 15, 15)];
    label.text = @"$";
    label.font = [UIFont systemFontOfSize:10];
    [label sizeToFit];
    textField.leftView = label;
    [self.view addSubview:textField];

Тогда просто получите текст.Нет необходимости в преобразовании или строковых операциях.

...