2011-08-12 6 views
22

J'ai un UITableView. Je souhaite mettre à jour les données de la table en fonction de la sélection effectuée. En ce moment j'utilise [mytable reloadData]; Je veux savoir s'il y a un moyen de mettre à jour la cellule sélectionnée. Puis-je modifier en utilisant NSIndexPath ou autres? Aucune suggestion?Recharger une cellule UITableView spécifique dans iOS

Merci.

Répondre

62

Pour iOS 3.0 et au-dessus, il vous suffit d'appeler:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; 

Pour recharger la ligne 3 de l'article 2 et ligne 4 de la section 3 par exemple, vous devrez faire ceci:

// Build the two index paths 
NSIndexPath* indexPath1 = [NSIndexPath indexPathForRow:3 inSection:2]; 
NSIndexPath* indexPath2 = [NSIndexPath indexPathForRow:4 inSection:3]; 
// Add them in an index path array 
NSArray* indexArray = [NSArray arrayWithObjects:indexPath1, indexPath2, nil]; 
// Launch reload for the two index path 
[self.tableView reloadRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationFade]; 
+0

Je ne suis pas familier avec le chemin d'index. Pouvez-vous s'il vous plaît laissez-moi en détail. – pa12

+1

NSIndexPath comme son nom l'indique contient un index. Un index est composé de 2 composants row et section. Vous pouvez en créer un avec [NSIndexPath indexPathForRow: (NSUInteger) inSection: (NSUInteger)]; – Abhinit

+0

Chaque section peut avoir plusieurs lignes. Dans le lecteur MP3 iPod par exemple, vous avez une section pour chaque lettre. Chacune de cette section contient plusieurs artistes. J'ai modifié mon code original pour vous montrer comment faire. – CedricSoubrie

2

Je pense que vous êtes à la recherche de cette méthode de UITableView:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation 
6

Vous pouvez également obtenir une référence à la Objet UITableViewCell et modification de ses étiquettes, etc.

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
cell.textLabel.text = @"Hey, I've changed!"; 
Questions connexes