文本框:shouldChangeCharactersInRange:replacementString:

时间:2011-09-23 16:05:56

标签: iphone uitextfield uitextfielddelegate

如何更正此代码。我只想要数字和范围不应超过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);
}

1 个答案:

答案 0 :(得分: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]