【问题标题】:How to group numbers using NSNumberFormatter as the user enters the digits into UITextField?当用户在 UITextField 中输入数字时,如何使用 NSNumberFormatter 对数字进行分组?
【发布时间】:2011-07-18 15:55:44
【问题描述】:

我想使用“。”对输入到我的金额字段中的数字进行分组。作为分组分隔符,例如 100.000

我实现了视图控制器的 shouldChangeCharactersInRange 方法,因此小数部分只允许使用数字和一个逗号,只能是 2 位数字。

现在我想在用户输入数字时实时放置分组分隔符。当我想到实现时,我对用户删除数字或用户将光标放在开头并在输入的数字前面输入 0 等事情感到困惑,所以......

最干净的实现是什么?

【问题讨论】:

    标签: ios uitextfield nsnumberformatter


    【解决方案1】:

    好的,方法如下:

    首先,您实现一个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];
    }
    

    【讨论】:

      猜你喜欢
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多