2009-10-01 7 views
1

J'ai un UITableView qui une fois qu'une cellule est cliquée, elle pousse tableViewB, qui contient des cellules personnalisées. Ces cellules contiennent TextFields. Une fois que l'utilisateur a effectué une mise à jour, il clique sur "Enregistrer", ce qui fait apparaître tableViewB et passe à la première UITableView. Je voudrais obtenir toutes les valeurs UITextField de tableViewB lorsque l'utilisateur clique sur Enregistrer. Quelle est la meilleure façon de faire cela?Récupération de cellules dans UITableView

Le problème est que j'ai besoin de boucler toutes les cellules UITableView. Je ne suis pas sûr de savoir comment cela est fait ou si c'est même une bonne approche. Je cherche juste de l'aide sur ce qui est une bonne technique ici.

+0

+1 pour votre question. Très intéressant. Avez-vous trouvé d'autres bonnes techniques pour le rendre possible? Merci. –

+0

Avec * d'autres bonnes techniques * je veux dire des techniques différentes de celles listées dans les réponses (bien aussi). –

Répondre

3

dans votre tête de tableViewB, déclare:

NSMutableArray *stringArray; 

et dans la mise en œuvre:

- (id) init { //whatever your tableViewB initializer looks like 
    if ([self = [super init]) { 
     //oldData is an NSArray containing the initial values for each text field in order 
     stringArray = [[NSMutableArray alloc] initWithArray:oldData]; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ... 
    //Making the cell 
    [cell.textfield addTarget:self action:@selector(updateField:) forControlEvents:UIControlEventValueChanged]; 
    .... 

    //Setting up the cell 
    cell.textfield.tag = indexPath.row; 
    cell.textfield.text = [stringArray objectAtIndex:indexPath.row]; 
    return cell; 
} 

- (void) updateField:(UITextField *)source { 
    NSString *text = source.text; 
    [stringArray replaceObjectAtIndex:source.tag withObject:text]; 
} 

- (void) dealloc { 
    [stringArray release]; 
} 

Il y a plusieurs façons dont vous pouvez choisir de récupérer vos données à la vue de la table d'origine, que ce soit par déléguer, ou en déclarant stringArray comme une variable transmise à l'initialiseur tableViewB plutôt que d'y être allouée.

1

Si je comprends bien votre question - id chaque cellule numérique et les référence dans un tableau/grimper le tableau en boucle à travers eux

3

Vous devez savoir que, en général, il y a seulement autant cellules réparties comme affiché sur l'écran. Les cellules qui ne sont pas visibles ne sont pas persistantes mais ne sont créées que lorsque tableView:cellForRowAtIndexPath: est appelée. Je vous suggère de créer un tableau pour mettre en cache le contenu de tous les champs de texte et qui est mis à jour chaque fois qu'un utilisateur quitte un champ de texte (par exemple la méthode textField: shouldEndEditing: ou quelque chose comme ça).

Questions connexes