1

ユーザーにテキストフィールドに金額を入力してもらいたいのですが、入力したとおりに値をフォーマットしたいと思います。つまり、ユーザーが 4 桁目を入力すると、適切な場所に 1000 を表すカンマが表示されます。例: 3,450

現在、テキスト フィールド デリゲート メソッド「shouldChangeCharactersInRange」と NSNumberFormatter を使用しようとしています。残念ながら、私は成功していません。誰かが私を正しい方向に向けることができますか? ありがとう!

4

1 に答える 1

4

UILabel1 つのオプションは、透明な背景を持つ を の上に重ねることUITextFieldです。の として登録し、delegateUITextFieldを実装します。

- (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;
}
于 2011-03-03T22:54:00.670 に答える