【问题标题】: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];
}