我需要实现这个目标:
当用户输入(在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;
}
答案 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
)。