Existe-t-il un moyen de recharger des cellules UITableView
spécifiques avec plusieurs sections avec des animations?
J'utilise:
self.TheTableView.reloadSections(NSIndexSet(index: 1), withRowAnimation: UITableViewRowAnimation.Right)
Cela anime cependant toutes les cellules de la section. L'autre option consiste à utiliser:
self.TheTableView.reloadRowsAtIndexPaths(<#indexPaths: [AnyObject]#>,
withRowAnimation: <#UITableViewRowAnimation#>)
ÉDITER:
Après avoir utilisé reloadRowsAtIndexPaths
Arrêt de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: 'Mise à jour non valide: nombre de lignes non valide dans la section 1. Le nombre de lignes contenues dans une section existante après la mise à jour (5) doit être égal au nombre de lignes contenues dans ce section avant la mise à jour (4), plus ou moins le nombre de lignes insérées ou supprimées de cette section (0 inséré, 0 supprimé) et plus ou moins le nombre de lignes déplacées dans ou hors de cette section (0 déplacé, 0 déplacé en dehors).'
Essayer de trouver un moyen fluide de recharger une table en ajoutant des objets dans un tableau.
L'appel de TheTableView.reloadData () avant que reloadRowsAtIndexPaths fonctionne, mais l'animation est glitchy. Y a-t-il une autre approche?
Pourquoi ne pas simplement recharger les cellules directement? L'indexPath contient la section et la ligne, il vous suffit donc de garder une trace de la section que vous souhaitez recharger et de remplir les index de ce tableau.
var indexPath1 = NSIndexPath(forRow: 1, inSection: 1)
var indexPath2 = NSIndexPath(forRow: 1, inSection: 2)
self.tableView.reloadRowsAtIndexPaths([indexPath1, indexPath2], withRowAnimation: UITableViewRowAnimation.Automatic)
En fonction de votre commentaire, vous cherchez à modifier votre tableau et à faire animer la tableView dans les modifications. Si c'est le cas, vous devriez envisager d'utiliser beginUpdates () et endUpdates () pour UITableViews ou même un NSFetchedResultsController afin qu'il gère toutes les animations de mise à jour proprement.
self.tableView.beginUpdates()
// Insert or delete rows
self.tableView.endUpdates()
Je recommanderais d'utiliser NSFetchedResultsController si vous utilisez Core Data car cela simplifie tout ce processus. Sinon, vous devez gérer les modifications vous-même. En d'autres termes, si votre tableau change, vous devez supprimer ou insérer manuellement des lignes dans la vue de table à l'aide de beginUpdates () et endUpdates (). Si vous n'utilisez pas Core Data, étudiez this pour comprendre comment tout cela est géré.
Dans Swift 3.
Nous pouvons recharger une ligne particulière d'une section particulière dans tableview
let indexPath = IndexPath(item: 2, section: 0)
self.tableView.reloadRows(at: [indexPath], with: .automatic)
Si vous souhaitez recharger une seule section dans Swift 3.0, vous pouvez le faire:
tableView.reloadSections(IndexSet(integer: 0), with: .automatic)
le define IndexSet dans le document officiel:
Gère un
Set
de valeurs entières, qui sont couramment utilisées comme type d'index dans Cocoa API. La plage de valeurs entières valides est comprise entre (0, INT_MAX-1). Tout ce qui est en dehors de cette plage est une erreur.
donc IndexSet est défini sur index, il suffit de mettre des valeurs Int dans []
// for reload one section
tableView.reloadSections([section], with: .automatic)
// or using like this
tableView.reloadSections(IndexSet(integer: section), with: .automatic)
// for reload multi sections
tableView.reloadSections([1, 2, 3, section], with: .automatic)