web-dev-qa-db-fra.com

Comment recharger et animer une seule cellule/ligne UITableView?

comment puis-je recharger et animer une seule cellule/ligne? En ce moment, je télécharge des fichiers. Chaque fois que le téléchargement d’un fichier est terminé, j’appelle son délégué terminé et j’appelle [tableview reload] . Et comment puis-je animer la table pour qu'elle ne clignote pas? Par exemple, un effet de fondu ou plus.

salue Max 

65
madmax

Utilisez la méthode d'instance UITableView suivante:

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

Vous devez spécifier une NSArray sur NSIndexPaths que vous souhaitez recharger. Si vous voulez juste recharger. Si vous souhaitez uniquement recharger une cellule, vous pouvez fournir une NSArray ne contenant qu'une seule NSIndexPath. Par exemple:

NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:3 inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[myUITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];

Vous pouvez voir l'énumération UITableViewRowAnimation pour connaître toutes les méthodes possibles pour animer l'actualisation de ligne. Si vous ne voulez pas d'animation, vous pouvez utiliser la valeur UITableViewRowAnimationNone, comme dans l'exemple.

Le rechargement de lignes spécifiques présente un avantage plus important que d'obtenir simplement l'effet d'animation souhaité. Vous bénéficiez également d'une amélioration considérable des performances, car seules les cellules dont vous avez vraiment besoin d'être rechargées ont leurs données actualisées, repositionnées et redessinées. En fonction de la complexité de vos cellules, il peut y avoir un surcoût à chaque fois que vous actualisez une cellule. Il est donc nécessaire d'optimiser le nombre de mises à jour que vous effectuez.

179
James Bedford

Si vous avez seulement besoin de mettre à jour le texte dans la cellule tableview.

UITableViewCell *cell = [_myTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];

cell.textLabel.text = [NSString stringWithFormat:@"%i", (int)_targetMaxDistanceSlider.value];
3
slammer

Pour recharger des cellules particulières dans tableView à indexPaths donné, vous devez créer un array of indexPaths et ensuite appeler la fonction reloadRowsAtIndexPaths sur la tableView.

Voici l'exemple:

Rapide:

let indexPathsToReload = [indexPath1, indexPath2, indexPath3]
tableView.reloadRowsAtIndexPaths(indexPathsToReload, withRowAnimation: .None)

Objectif c:

NSArray *indexPaths = @[indexPath1, indexPath2, indexPath3];
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];

ou

NSArray *indexPaths = [NSArray arraywithobject:@"indexPath1", @"indexPath2", @"indexPath3",nil];
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
0
BLC

Rapide

Vous pouvez utiliser 

let selectedIndexPath = IndexPath(item:0 , section: 0)
self.tableView.reloadRows(at: [selectedIndexPath], with: .none)

afin de recharger une cellule spécifique.

0

Document Apple fait avec une nouvelle syntaxe

[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
0
Muhammad Aamir Ali