2010-12-07 16 views
1

est-il possible de changer la valeur d'une cellule après son chargement? En fait, j'ai un champ de texte dans la table et après avoir inséré la valeur de la même, j'ai besoin de faire des opérations numériques sur la valeur textfield et la valeur calculatrice doit afficher sur l'étiquette dans la cellule suivante.Comment changer la valeur d'une cellule après rechargement dans l'objectif c?

Alors, comment puis-je obtenir le même résultat?

Merci d'avance.

+0

l'étiquette est créée runtime? – KingofBliss

+0

Je ne pouvais pas comprendre où est votre problème. Avez-vous besoin de mettre à jour le texte d'un UITextField et que ce champ de texte se trouve dans une cellule à laquelle vous n'avez pas de référence? – AYBABTU

+0

oui il est créé au moment de l'exécution. Dans la méthode cellForRowAtIndexPath, je passe une valeur dans textfield qui doit être reflétée dans l'étiquette qui se trouve dans la cellule suivante. La valeur textfield doit rester telle quelle et la valeur de l'étiquette doit passer de 0 à quelque chose. – Sarah

Répondre

3

Il existe plusieurs façons de mettre à jour une cellule dans un UITableView.

1) Appelez la méthode de vue de table reloadRowsAtIndexPaths:withRowAnimation:. Cela déclenchera un appel à la méthode déléguée tableView:cellForRowAtIndexPath:. Si vous avez une source de données que vous mettez à jour ce serait un bon moyen de mettre à jour une cellule.

NSIndexPath *indexPathOfUpdatedCell = ... 
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPathOfUpdatedCell] withRowAnimation:UITableViewRowAnimationFade]; 

2) Il est également possible de mettre à jour la cellule directement. Vous pouvez utiliser cellForRowAtIndexPath:.

NSIndexPath *indexPathOfUpdatedCell = ... 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPathOfUpdatedCell]; 
cell.textLabel.text = @"new value"; 

Pour créer un chemin d'index pour une ligne spécifique et section, il est possible d'utiliser indexPathForRow:inSection.

NSUInteger row = ... 
NSUInteger section = ... 
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section]; 
+0

Merci pour l'aide, mais pouvez-vous me dire comment puis-je passer l'index de la ligne dans le NSIndexPath * indexPathOfUpdatedCell. J'ai essayé indexAtPosition mais je ne reçois pas de format spécifique. – Sarah

+0

Merci beaucoup Robert pour la solution. – Sarah

1

Pour ce que vous essayez de faire, votre meilleur pari est de rendre votre contrôleur de vue d'un <UITextFieldDelegate>, définissez le délégué du champ de texte de votre cellule à soi-même, puis mettre en œuvre la textFieldDidEndEditing: méthode déléguée.

Changer votre fichier d'interface pour adopter le protocole

@interface YourViewController : UIViewController <UITextFieldDelegate> 

Réglez ensuite le contrôleur de vue en tant que délégué de votre UITextField concerné (s) ...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ... 
    yourCustomCell.yourTextField.delegate = self 
} 

Et enfin mettre en œuvre

- (void) textFieldDidEndEditing:(UITextField *)textField. 

Cette méthode sera appelée à chaque fois que l'utilisateur finit d'éditer votre UITextField, un Etant donné qu'il passe une référence à celui-ci, vous pouvez accéder à ses valeurs, effectuer toute validation dont vous pourriez avoir besoin et l'assigner au champ de texte.

+0

oh merci, c'est une excellente façon de mettre en œuvre. – Sarah