验证文本字段长度

时间:2012-03-08 15:50:27

标签: objective-c ios uitextfield uialertview

我正在尝试在textField中验证文本长度。这是我尝试的

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *textLenght = [NSString stringWithFormat:@"%@", [textField text]];
    if ([textLenght length] > 5)
    {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Message" 
                                                message:@"Too long" 
                                                delegate:self 
                                                cancelButtonTitle:@"OK" 
                                               otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
        return NO;
    }
    return YES;
}

此代码效果很好。当我输入超过5个字符时,会显示警告框。问题是,当我尝试删除文本字段的最后一个字符时,会再次显示警告框。

如何解决这个问题?

3 个答案:

答案 0 :(得分:6)

您必须先创建实际的字符串

NSString *str = [textField.text stringByReplacingCharactersInRange:range withString:text];

之后检查长度

int length = str.length;

继续进行if(长度)检查。

这种方式首先创建所需的字符串(也考虑退格)。

答案 1 :(得分:2)

要检查是否已按下删除按钮,您需要检查“string”是否等于@“”:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{

 if ([string isEqualToString:@""])...

}

答案 2 :(得分:0)

您需要的是阻止从头开始添加第5个符号,然后您可以删除...

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    NSLog(@"Enter");
    NSInteger oldLength = [textField.text length];
    NSInteger newLength = oldLength + [string length] - range.length;
    if(newLength >= 5){
       return NO;
    }
    return YES;
}