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

这里的问题是第一个之后的任何内容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 回答