在TextField iOS 7 Xcode 5上格式化十进制

时间:2014-06-10 14:33:05

标签: ios7 decimal textfield

我需要实现这个目标:

当用户输入(在textField上)时:123456

该字段将显示123,456

我有下面的代码,但是,出于某种原因,我可以在输入" 5"整个领域重置为1。

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *textt = [textField.text stringByReplacingCharactersInRange:range withString:string];

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];

NSString *formattedString = [formatter stringFromNumber:[NSNumber numberWithFloat:[textt floatValue]]];


textField.text = formattedString;


return NO;

}

1 个答案:

答案 0 :(得分:0)

它为你完成了工作,对我感到羞耻我可以做得更好,但我希望有人可以为这个问题给你一个更优雅的解决方案。 (例如使用正则表达式等)

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    NSNumberFormatter *_formatter = [[NSNumberFormatter alloc] init];
    [_formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    NSMutableString *_pureNumber = [NSMutableString stringWithString:[textField.text stringByReplacingCharactersInRange:range withString:string]];
    [_pureNumber replaceOccurrencesOfString:_formatter.groupingSeparator withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, _pureNumber.length)];
    [textField setText:[_formatter stringFromNumber:@([_pureNumber doubleValue])]];
    return NO;
}

所以,一般的想法是你需要将textt转换回数字。

自动解析器无法为您执行此操作,因为1,234之后1,2345不是此格式化程序中的有效数字,这就是为什么您只获得了第一个数字,只是解析器在逗号,之后删除所有内容。 (这是格式化程序中的groupingSeparator)。