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

ただし、複数の番号を入力することは可能です。エラーを見つけるのを手伝ってください。

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には正解がありますが、現在機能していない理由をお知らせします。

2桁目を入力すると、コードは次のifステートメントに入ります。

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

sepStrの長さは常に1であるため、これは常にYESを返します。

于 2012-10-06T19:16:03.030 に答える
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 に答える