2

我只需要允许最终用户输入 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 个数字。请帮助查找错误。

4

5 回答 5

3

只需将其添加到您的第一个测试中:

if ([newString length] > 1)
    return NO;
于 2012-10-06T18:43:52.927 回答
2

为什么不为此字段指定最大长度为 1 的数字键盘/小键盘?

UITextField 对象有一个keyboardType 属性。将其设置为 UIKeyboardTypeDecimalPad

于 2012-10-06T18:29:16.937 回答
1

Cyrille 有正确的答案,但只是为了让您知道为什么它目前不起作用:

当您输入第二个数字时,代码将进入此 if 语句:

if([newString length]>=1)
{
    NSString *sepStr=[newString substringToIndex:1];
    return !([sepStr length]>1);
}

这总是会返回 YES,因为 sepStr 的长度总是 1。

于 2012-10-06T19:16:03.030 回答
1

使用此代码它将为我工作(工作代码)

#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;

}

于 2015-01-11T10:15:35.430 回答
0
NSString *number = @"[0-9]"; 
NSPredicate *numbertest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", number]; 
if ([numbertest evaluateWithObject:yourtextfield.text] != YES)
{
// Display error message
}

只需使用此代码

于 2013-02-15T15:02:41.327 回答