2010-04-14 17 views
0

J'ai 3 UITextFields dans un UITableView groupé et essaye de trouver la bonne logique pour que mon UIBarButtonItem 'Save' soit activé quand aucun des UITextFields n'est vide.Activer UIBarButtonItem si plusieurs UITextFields sont tous remplis

J'utilise actuellement la méthode de délégation UITextField - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string pour détecter les modifications apportées au caractère champ par caractère, mais elle fournit des résultats incohérents.

Des idées?

Modifier: Voici le code que j'utilise maintenant. Comme vous pouvez le voir, j'ai placé mes champs de texte dans un tableau afin que je puisse les parcourir. Comme c'est le cas maintenant, le bouton de sauvegarde n'est activé que lorsque j'entre le 2ème caractère dans le 3ème champ. En outre, il alterne activé/désactivé comme un caractère de suppression un par un des champs.

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; 

Répondre

0

Ok, voici comment je l'ai finalement fait.

J'ai créé - (IBAction)validateFields:(id)sender et je l'ai connecté à la prise Editing Modged sur UITextField. Ça ressemble à ça.

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

Je lui ai donné un coup assez décent et ne pouvait pas obtenir le bouton Enregistrer pour activer sur une combinaison de champs de texte vides, donc je vais dire est le chemin à parcourir.

0

Comment exactement utilisez-vous la méthode? Voici comment je le ferais:

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

Mais il serait plus logique pour vous d'activer le bouton après que l'utilisateur appuie sur la touche entrée, ce qui est plus facile à traiter. Utilisez simplement un événement didEndEditingOnExit ou didEndEditing dans les champs de texte et vérifiez s'ils sont non vides.

+0

J'ai mis à jour ma question pour clarifier ce que j'essaie de faire. –