【发布时间】:2014-11-14 16:42:35
【问题描述】:
我正在尝试将 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;
感谢您的帮助!
【问题讨论】:
-
如果什么不起作用,请提供一些示例。
-
我真的不建议这样做。在用户输入时根据过滤拒绝用户内容更改是非常令人沮丧的。当用户输入文本时,文本可能会经历多个中间阶段,并且通过在他们输入时进行验证,您要求他们遵循对他们来说可能并不明显的路径。
标签: ios uitextfield nsnumberformatter