我的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
我该如何防止这种情况?
答案 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]];