我无法获得所需的NSNumberFormatter结果。我已经尝试了几种属性组合,但还没有得到我正在寻找的东西。
我希望在用户使用小数点键盘输入时格式化UITextField。
可接受的输入格式:
12
12.3
12.34
小数点前至少2位数,小数点后最多2位数。 在这种情况下,最大可能值为99.99。
当用户键入1 2 3 4 ..文本字段应显示以下内容
1
12
12.3
12.34
如果用户没有明确使用小数点,则应自动插入。
这是我最近的尝试,但就像我说的那样..我已经尝试了很多东西
-(void)textFieldDidChange:(UITextField *)theTextField
{
if (theTextField.text) {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *number = [formatter numberFromString:theTextField.text];
//[formatter setMinimumIntegerDigits:2];
[formatter setMaximumIntegerDigits:2];
[formatter setMaximumFractionDigits:2];
theTextField.text = [NSString stringWithFormat:@"%@", [formatter stringFromNumber:number]];
}
}
答案 0 :(得分:0)
我会选择其他方法。
在textFieldDidChange中不要格式化,而是使用NSPredicate和RegEx进行验证。
-(void)textFieldDidChange:(UITextField *)theTextField
{
if (theTextField.text) {
NSString *regex = @"^[0-9]{0,2}[\\.]{0,1}[0-9]{0,2}$";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if (![pred evaluateWithObject:mystring])
{ // Error, input not matching! Remove last added character.
int len = theTextField.text.length-((theTextField.text.length-1 == 3) ? 2 : 1;
theTextField.text = [theTextField.text substringWithRange:NSMakeRange(0, len)];
// Now checks if the new length, i.e. the length when the last digit has been deleted is 3, which means that the decimal dot is the last character. If so remove 2 instead of only 1 character!
}
else
{ // OKay here, do whatever
if(theTextField.text.length == 2) // Add decimal dot if two digits have been entered!
theTextField.text = [NSString stringWithFormat:@"%@.", theTextField.text];
}
}
}
答案 1 :(得分:0)
尝试使用给定的正则表达式 -
NSString *regex = @"^[0-9]{0,2}(\\.[0-9]{1,2})?";