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
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.
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];
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];
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.
Document Apple fait avec une nouvelle syntaxe
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];