0

「。」を使用して、金額フィールドに入力された数値をグループ化したい。グループ化セパレーターとして、100.000のように

ビューコントローラのshouldChangeCharactersInRangeメソッドを実装して、小数部に数字と1つのコンマのみが許可されるようにしました。これは2桁のみです。

ここで、ユーザーがリアルタイムで数字を入力するときに、グループ化区切り文字を配置します。実装を考えると、ユーザーが数字を削除したり、ユーザーが先頭にカーソルを置いて、入力した数字の前に0を入力したりするなど、混乱しています...

最もクリーンな実装は何でしょうか?

4

1 に答える 1

0

OK、方法は次のとおりです。

まず、UITextFieldカテゴリを実装します。それからあなたは自分自身に言います:

[self addTarget:self action:@selector(formatTextAsNumber) forControlEvents:UIControlEventEditingChanged];

そしてformatTextAsNumber、これが魅力を発揮する方法です。

- (void)formatTextAsNumber {

    [self removeTarget:self action:@selector(formatTextAsNumber) forControlEvents:UIControlEventEditingChanged];

    if ([self.text length] > 0) {
        NSString *currentText = [NSString stringWithString:self.text];

        currentText = [currentText stringByReplacingOccurrencesOfString:kGroupingSeperator withString:@""];
        currentText = [currentText stringByReplacingOccurrencesOfString:@"," withString:@"."];

        NSString *suffix = [currentText substringFromIndex:[currentText length] - 1];

        NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
        NSLocale *trLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"tr_TR"] autorelease];
        [formatter setLocale:trLocale];

        NSNumber *number = [NSNumber numberWithDouble:[currentText doubleValue]];
        [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
        [formatter setGroupingSeparator:@"."];

        NSString *finalText = [formatter stringFromNumber:number];

        if ([suffix isEqualToString:@"."]) {
            finalText = [finalText stringByAppendingString:@","];
        }

        self.text = finalText;
        [formatter release];
    }

    [self addTarget:self action:@selector(formatTextAsNumber) forControlEvents:UIControlEventEditingChanged];
}
于 2011-08-10T16:52:48.820 に答える