2010-04-14 30 views
0

我在分組的UITableView中有3個UITextFields,並且試圖找出正確的邏輯,只有在UITextFields都爲空時才啓用「保存」UIBarButtonItem。如果多個UITextFields全部填充,請啓用UIBarButtonItem

我目前使用- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string UITextField委託方法來檢測字符逐字符的變化,但它提供了不一致的結果。

任何想法?

編輯:這是我現在使用的代碼。正如你所看到的,我已經將我的文本字段放入一個數組中,所以我可以遍歷它們。現在,直到我輸入第三個字段中的第二個字符,保存按鈕纔會啓用。此外,它會交替啓用/禁用,從字段中逐個刪除字符。

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

    BOOL allValid; 

    if (newString.length) 
    { 
     // Cycle through array checking for completeness 
     for (int i = 0; i < [textFieldArray count]; i++) 
     { 
      if ([[[textFieldArray objectAtIndex:i] text] length] > 0) 
      { 
       allValid = YES; 
       NSLog(@"TextField #%i Validates.", i); 
      } 
      else 
      { 
       allValid = NO; 
       NSLog(@"TextField #%i Does Not Validate.", i); 
      } 
     } 
    } 
    else 
    { 
     NSLog(@"Invalid"); 
     allValid = NO; 
    } 

    if (allValid) 
     [saveButton setEnabled:YES]; 
    else 
     [saveButton setEnabled:NO]; 

    return YES; 

回答

0

好吧,我終於做到了。

我創建了- (IBAction)validateFields:(id)sender並將它連接到UITextField上的Editing Changed出口。它看起來像這樣。

- (IBAction)validateFields:(id)sender 
{ 
    BOOL valid = YES; 

    // On every press we're going to run through all the fields and get their length values. If any of them equal nil we will set our bool to NO. 
    for (int i = 0; i < [textFieldArray count]; i++) 
    { 
     if (![[[textFieldArray objectAtIndex:i] text] length]) 
      valid = NO; 
    } 

    [saveButton setEnabled:valid]; 
} 

我已經給它一個相當不錯的去,無法得到保存按鈕以啓用空文本字段的任意組合,所以我會說這是要走的路。

0

您究竟如何使用該方法?這是我會怎麼做:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 
    if (newString.length) { 
    //If all the others are also non-empty, enable your button 
    } 
    return YES; 
} 

但它可能會更有意義,用戶按下回車鍵,這是比較容易處理後爲您啓用按鈕。只需在文本字段上使用didEndEditingOnExit或didEndEditing事件並在那裏檢查它們是否非空。

+0

我更新了我的問題,以澄清我正在嘗試做什麼。 – 2010-04-15 00:34:13