2012-03-08 105 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; 
}