0

我有四個UITextField s,並且想限制每個長度,但它們都是不同的長度。我有以下的代碼,到目前爲止,但它並不完全正常工作限制多個UITextFields的長度

define MAXLENGTH 5 
define MAXQTY 3 
define MAXSIZE 4 
define MAXBRAND 10 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
    int lengtha = [brand.text length] ; 
    NSLog(@"lenghta = %d",lengtha); 
    if (lengtha >= MAXBRAND && ![string isEqualToString:@""]) { 
    brand.text = [brand.text substringToIndex:MAXBRAND]; 
     return NO; 
    } 
    return YES; 

    int lengthb = [qty.text length] ; 
    NSLog(@"lenghtb = %d",lengtha); 
    if (lengthb >= MAXQTY && ![string isEqualToString:@""]) { 
     qty.text = [qty.text substringToIndex:MAXQTY]; 
     return NO; 
    } 
    return YES; 

    int lengthc = [size.text length] ; 
    NSLog(@"lenghtc = %d",lengtha); 
    if (lengthc >= MAXSIZE && ![string isEqualToString:@""]) { 
     size.text = [size.text substringToIndex:MAXSIZE]; 
     return NO; 
    } 
    return YES; 

    int lengthd = [price.text length] ; 
    NSLog(@"lenghtd = %d",lengtha); 
    if (lengthd >= MAXLENGTH && ![string isEqualToString:@""]) { 
     price.text = [price.text substringToIndex:MAXLENGTH]; 
     return NO; 
    } 
    return YES; 
} 
+3

只要你的代碼到達第一個「return YES;」在if語句之後,沒有別的東西獲得進程。你的邏輯不正確。 – 2011-05-29 22:35:49

回答

2

如果品牌,數量,尺寸和價格都是實例變量(或屬性),並連接到您的UITextFields你可以試試這個:

define MAXLENGTH 5 
define MAXQTY 3 
define MAXSIZE 4 
define MAXBRAND 10 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
    if (textField == brand) { 
     int lengtha = [brand.text length]; 
     NSLog(@"lenghta = %d",lengtha); 
     if (lengtha >= MAXBRAND && ![string isEqualToString:@""]) { 
      brand.text = [brand.text substringToIndex:MAXBRAND]; 
      return NO; 
     } 
     return YES; 
    } else if (textField == qty) { 
     int lengthb = [qty.text length]; 
     NSLog(@"lenghtb = %d",lengthb); 
     if (lengthb >= MAXQTY && ![string isEqualToString:@""]) { 
      qty.text = [qty.text substringToIndex:MAXQTY]; 
      return NO; 
     } 
     return YES; 
    } else if (textField == size) { 
     int lengthc = [size.text length]; 
     NSLog(@"lenghtc = %d",lengthc); 
     if (lengthc >= MAXSIZE && ![string isEqualToString:@""]) { 
      size.text = [size.text substringToIndex:MAXSIZE]; 
      return NO; 
     } 
     return YES; 
    } else if (textField == price) { 
     int lengthd = [price.text length]; 
     NSLog(@"lenghtd = %d",lengthd); 
     if (lengthd >= MAXLENGTH && ![string isEqualToString:@""]) { 
      price.text = [price.text substringToIndex:MAXLENGTH]; 
      return NO; 
     } 
     return YES; 
    } 
    return YES; 
} 
+0

我已經根據你的建議修改了代碼,而且我仍然得到相同的結果,沒有限制它的文本字段和NSLog不報告字符數。 我有UITextfields所有在.h文件中設置和IBOutlets也在.h文件中 – sjbuchanan007 2011-05-29 23:40:15

+0

我已經修復它您的代碼是偉大的,我已經添加brand.delegate = self下viewDidLoad它現在工作很好,謝謝你你的幫助 – sjbuchanan007 2011-05-29 23:49:54

+0

是的,你必須設置所有四個UITextFields的代表。我還修改了一些代碼。在所有四種情況下,您總是使用NSLogging lengtha,而不是每次使用正確的變量(lengtha,lengthb,lengthc,lengthd)。 – Sascha 2011-05-29 23:55:37