форматирование текстового поля, когда пользователь печатает - PullRequest
1 голос
/ 03 марта 2011

Я бы хотел, чтобы пользователь набрал сумму в текстовом поле, и я хочу, чтобы значение форматировалось по мере его ввода.Это означает, что когда пользователь вводит 4-ю цифру, в соответствующем месте появляется запятая, обозначающая тысячи.пример: 3450

Сейчас я пытаюсь использовать метод делегата текстового поля "shouldChangeCharactersInRange" и NSNumberFormatter.К сожалению, я не имел никакого успеха.Может ли кто-нибудь указать мне правильное направление?спасибо!

1 Ответ

4 голосов
/ 04 марта 2011

Один из вариантов - наложить UILabel на прозрачный фон поверх вашего UITextField.Зарегистрируйтесь как delegate из UITextField и реализуйте:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

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

static NSNumberFormatter *formatter;

- (BOOL)textField:(UITextField *)aTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{   
    NSString *textFieldValue = [aTextField.text stringByAppendingString:string];

    if (range.length > 0)
        textFieldValue = [aTextField.text substringToIndex:range.location];

    if ([textFieldValue isEqualToString:@""])
        self.formattedLabel.text = textFieldValue;
    else
    {
        NSDecimalNumber *newValue = [[NSDecimalNumber alloc] initWithString:textFieldValue];
        if (!formatter) formatter = [[NSNumberFormatter alloc] init];
        formatter.numberStyle = NSNumberFormatterDecimalStyle;
        self.formattedLabel.text = [formatter stringFromNumber:newValue];
    }

    return YES;
}
...