Comment puis-je recharger et animer une seule cellule / ligne? En ce moment, je télécharge des fichiers. Chaque fois qu’un fichier a été téléchargé, j’appelle son délégué terminé et appelle [recharger tableview]. Mais la table entière se recharge ensuite. Et comment puis-je animer la table pour qu’elle ne clignote pas. Par exemple, un effet de fondu, etc.
accueille Max
Utilisez la méthode d’instance UITableView
suivante:
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
Vous devez spécifier un NSArray
de NSIndexPaths
que vous souhaitez recharger. Si vous voulez juste recharger. Si vous souhaitez uniquement recharger une cellule, vous pouvez fournir un NSArray
NSIndexPath
uniquement un 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 toutes les manières possibles d’animer l’actualisation de la 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 l’obtention de l’effet d’animation souhaité. Vous obtenez également une amélioration considérable des performances car seules les cellules que vous avez vraiment besoin de recharger ont leurs données actualisées, repositionnées et redessinées. En fonction de la complexité de vos cellules, il peut y avoir une surcharge à chaque fois que vous actualisez une cellule. Il est donc nécessaire d’optimiser autant que possible la quantité de rafraîchissements 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 = [NSSsortingng ssortingngWithFormat:@"%i", (int)_targetMaxDistanceSlider.value];
Apple Document l’a fait avec une nouvelle syntaxe
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
Pour recharger des cellules particulières dans une tableView
à tableView
donné, vous devez créer un tableau d’ indexPaths
, puis 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];