为了在UITextField
分组分隔符中编辑分组分隔的数字,需要在编辑时切换。否则返回的值(存储为NSNumber
值)是(NULL),由于错位的组合分隔符(参见图片并想象该数字将扩展另一个数字,例如“50.0000”)。
我怎样才能做到这一点?
现在该值在-(void) textFieldDidEndEditing:(UITextField *)textField
方法中处理。
(我的语言环境是德语,所以“。”是分组分隔符而不是小数分隔符!)但我试图让代码适用于所有地区。
为了在UITextField
分组分隔符中编辑分组分隔的数字,需要在编辑时切换。否则返回的值(存储为NSNumber
值)是(NULL),由于错位的组合分隔符(参见图片并想象该数字将扩展另一个数字,例如“50.0000”)。
我怎样才能做到这一点?
现在该值在-(void) textFieldDidEndEditing:(UITextField *)textField
方法中处理。
(我的语言环境是德语,所以“。”是分组分隔符而不是小数分隔符!)但我试图让代码适用于所有地区。
试试这个解决方案:
-(void) textFieldDidEndEditing:(UITextField *)textField {
NSString *stringWithoutDots = [textField.text stringByReplacingOccurrencesOfString:@"." withString:@""]; //remove dots
int number = [stringWithoutDots intValue]; //convert into int
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important!
NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:number]];
}
我希望这对你有帮助。凯文·马查多
感谢thedjnivek和他的第二个建议。我不得不稍微调整一下,现在它就像一个魅力。仅针对所有具有相同问题的人,我的最终代码:
-(void) textFieldDidEndEditing:(UITextField *)textField
{
NSMutableString* mstring = [[textField text] mutableCopy];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc]init];
[numberFormatter setLocale:[NSLocale currentLocale]];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString* localeSeparator = [[NSLocale currentLocale]
objectForKey:NSLocaleGroupingSeparator];
NSNumber* number = [numberFormatter numberFromString:[mstring
stringByReplacingOccurrencesOfString:localeSeparator withString:@""]];
[textField setText:[numberFormatter stringFromNumber:number]];
}
你可以在这里看到答案:
不要做自己的数字格式。您几乎肯定不会正确处理所有边缘情况或正确处理所有可能的语言环境。使用 NSNumberFormatter 将数字数据格式化为本地化的字符串表示。
您将使用 NSNumberFormatter 实例方法 -setGroupingSeparator: 将分组分隔符设置为 @"。" (或者更好的是 [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];感谢@ntesler)和 -setGroupingSize: 每 3 位数放置一个分组分隔符。
++,凯文·马查多