添加点/小数后,UITextField会拧紧

时间:2013-12-04 22:10:31

标签: ios objective-c uitextfield

我的UITextField有一个UIKeyboardTypeNumberPad作为键盘,因此用户只能输入整数。现在为了使他们的输入更具可读性,我决定添加以下代码:

formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
self.inputField.text = [formatter stringFromNumber:[formatter numberFromString:self.inputField.text]];

为了在1,234中改变1234等等

这可以工作,直到第一个小数。如果我将这段代码注释掉,我可以输入值直到999999999,如果我想要的话,我可以进一步添加,但是如果我添加这段代码,我的文字输入就像这样

1保持不变 12保持不变 123保持不变 1234变为1,234 如果我然后输入一个额外的数字(例如5),它清除我的UITextField而不是12,345

我该如何防止这种情况?

2 个答案:

答案 0 :(得分:2)

当文字字段为1,234且用户输入5时,您会在文本字段中输入1,2345。正确的吗?

然后尝试使用格式化程序将该字符串转换为数字。但这不是一个有效的数字。这就是结果变成空白的原因。

您需要做的是获取当前文本字段值并删除任意数千个分隔符,然后重新格式化结果。

formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString *separator = [formatter groupingSeparator];
// Remove any existing grouping separators from the text field text
NSString *current = self.inputField.text;
current = [current stringByReplacingOccurrencesOfString:separator withString:@""];
// Reformat the number
self.inputField.text = [formatter stringFromNumber:@([current integerValue])];

答案 1 :(得分:1)

好吧那是因为1,2345是一个格式不正确的十进制数,你试图把它识别为一个数字。您应该使用:

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

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

NSString *onlyNumbers = [[self.inputField.text componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];

self.inputField.text = [decimalFormatter stringFromNumber:[numberFormatter numberFromString:onlyNumbers]];