我正在尝试将 UITExtField 配置为仅接受11个数字,我正在使用 NSNumberFormatter ,并且使用数字时效果很好,但是当我尝试使用设置可用的最大数量不起作用。
即使分配 setMaximumFractionDigits , setMaximumIntegerDigits 和 setMaximumSignificantDigits ,它也不会像它应该的那样工作,或者我错过了什么?请帮忙。
这是我的代码......
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSNumberFormatter *num = [[NSNumberFormatter alloc] init];
[num setNumberStyle:NSNumberFormatterDecimalStyle];
[num setUsesSignificantDigits:YES];
[num setMaximumFractionDigits:0];
[num setMaximumIntegerDigits:11];
[num setMaximumSignificantDigits:11];
NSString *aString = [textField.text stringByReplacingCharactersInRange:range withString:string];
//[NSString stringWithFormat:@"%@%@", textField.text, string];
NSNumber *number = [num numberFromString:aString];
if (number) {
return YES;
else
return NO;
}
修改
我像Ian所说的那样对代码进行了重新排序,并且做了Ink所说的更改,但仍然是相同的,我只能写数字,但我可以写超过11个数字。
编辑2
感谢Ian和Ink,现在它有效,我需要检查 aString.length 是否小于12,它是数字。
if (aString.length < 12 && number)
return YES;
else
return NO;
感谢您的帮助!
答案 0 :(得分:1)
aString
应为[textField.text stringByReplacingCharactersInRange:range withString:string]
return aString.length <= 11;
从那里你可以检查字符串的长度,假设你知道它是一个数字字符串。如果您不能这样做,那么请执行@Ian MacDonald建议并重新排序您的代码,如下所示:
NSNumber *rawNumber = [num numberFromString:aString];
[num setUsesSignificantDigits:YES];
[num setMaximumFractionDigits:0];
[num setMaximumIntegerDigits:11];
[num setMaximumSignificantDigits:11];
NSNumber *number = [num numberFromString:aString];
return rawNumber == number;
另请注意,只看数字格式器给你一个数字是不够好的。您需要检查格式化程序是否修剪了数字。
答案 1 :(得分:0)
您在number
上设置约束之前指定了num
...请改为尝试:
[num setUsesSignificantDigits:YES];
[num setMaximumFractionDigits:0];
[num setMaximumIntegerDigits:11];
[num setMaximumSignificantDigits:11];
NSNumber *number = [num numberFromString:aString];
if (number) {
return [[num stringFromNumber:number] length] <= 11 && [[num stringFromNumber:number] length] == [aString length];
} else {
return NO;
}