1

このコードを修正するにはどうすればよいですか。数値のみが必要で、範囲が 10 を超えないようにする必要があります。私のコードは

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 10) ? NO : YES;

    static NSCharacterSet *charSet = nil;
    if(!charSet) {
        charSet = [[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet] retain];
    }
    NSRange location = [string rangeOfCharacterFromSet:charSet];
    return (location.location == NSNotFound);
}
4

1 に答える 1

3

ここでの問題は、1 つ目以降がreturn実行されないことです。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 10) ? NO : YES;
    // unreachable!

したがって、長さをチェックしているだけで、入力が数値であるかどうかはチェックしていません。この行を変更します。

return (newLength > 10) ? NO : YES;

これで:

if (newLength > 10) return NO;

そしてそれはうまくいくはずです。オプションでこれを変更することもできます。

[NSCharacterSet characterSetWithCharactersInString:@"0123456789"]

これとともに:

[NSCharacterSet decimalDigitCharacterSet]
于 2011-09-23T16:26:23.710 に答える