我需要允许最终用户输入1-9位数字:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if([newString length]>=1)
{
NSString *sepStr=[newString substringToIndex:1];
return !([sepStr length]>1);
}
if ([string length] == 0 && range.length > 0){
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
return NO;
}
NSCharacterSet *nonNumberSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
if ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0)return YES;
return NO;
}
但是仍然可以输入1个以上的数字。 请帮助查找错误。
答案 0 :(得分:3)
只需将其添加到您的第一个测试中:
if ([newString length] > 1)
return NO;
答案 1 :(得分:2)
为什么不为此字段指定最大长度为1的数字键盘/小键盘?
UITextField对象具有keyboardType属性。将其设置为UIKeyboardTypeDecimalPad
答案 2 :(得分:1)
Cyrille有正确的答案,但只是为了让你知道为什么它目前没有工作:
当您输入第二个数字时,代码将进入以下if语句:
if([newString length]>=1)
{
NSString *sepStr=[newString substringToIndex:1];
return !([sepStr length]>1);
}
总是会返回YES,因为sepStr的长度总是为1。
答案 3 :(得分:0)
NSString *number = @"[0-9]";
NSPredicate *numbertest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", number];
if ([numbertest evaluateWithObject:yourtextfield.text] != YES)
{
// Display error message
}
只需使用此代码
答案 4 :(得分:0)
使用此代码对我有用(工作代码)
#define ACCEPTABLE_CHARACTERS @“0123456789”
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if([textField isEqual:zipCode]){
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
return YES;
}