2012-03-08 109 views
0

我试图验证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个以上的字符时,会显示警告框。问题是,当我尝试删除文本字段的最后一个字符时,警告框会再次显示。

如何解决这个问题?

回答

6

你必须创建实际的字符串第一

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

之后检查长度

int length = str.length; 

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

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

+0

为什么要创建它? – Ariel 2012-03-08 16:03:20

+0

@Ariel正如我在我的回答中所说的,因为字符用户输入可能是退格,它会减少字符串的长度,并且检查逻辑将是正确的。 – Eugene 2012-03-08 18:02:36

2

要检查是删除按钮被按下,你需要检查“串”的isEqual为@“”:

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

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

} 
+0

你已经忘了复制/粘贴。我绝对可以复制空字符串然后粘贴。 – Ariel 2012-03-08 15:59:26

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