Recharger tableView section sans rechargement de la section d'en-tête - Swift
Je suis en train de recharger tableView section au lieu de recharger l'ensemble de la tableview parce que j'ai un champ de texte dans la section d'en-tête et quand je l'appelle self.tableView.reloadData()
mon clavier fermé.
J'ai essayé le code ci-dessous mais j'ai cette erreur Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete row 5 from section 2 which only contains 4 rows before the update'
de Sorte s'il vous plaît où serait mon problème?
let newCount = self.placeArray.count
var newIndexPaths = NSMutableArray(capacity: newCount)
for var i = 0 ; i < newCount ; i++ {
var indexPath = NSIndexPath(forRow: i, inSection: 2)
newIndexPaths.addObject(indexPath)
}
self.tableView.beginUpdates()
self.tableView.reloadRowsAtIndexPaths(newIndexPaths as [AnyObject], withRowAnimation: UITableViewRowAnimation.None)
self.tableView.endUpdates()
- Ce code facilement provoque des incohérences, n'hésitez pas à appeler la source de méthode pour obtenir le nombre de lignes.
- Je suis désolé, je n'ai pas compris comment le faire?
- Utilisation
numberOfRowsInSection
au lieu de copier la logique à partir de là, de cette façon, le nombre doit toujours être correct. Vous n'avez pas de montrer ou de le mentionner toute modification du nombre de lignes donc je suppose que vous ne le faites pas, sinon vous devez prendre soin de changer de numéro en conséquence, selon le moment où vous obtenez le nombre et modifier la source de données. - Je pense que vous me donner la solution, mais je ne suis pas vous. Je suis à jour le
numberOfRows
avec le nouveau tableau. @Un-Live - Vous essayez de mettre à jour plus de lignes qu'il y a, vue tableau suppose que vous tentez de supprimer une ligne qui est causée par une erreur dans le calcul du nombre de lignes.
- Reportez-vous à Recharger la section sans avoir à recharger la section d'en-tête
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
UITableView
'sreloadSections
méthode à la place.self.myTableView.reloadSections(NSIndexSet(index: index) as IndexSet, with: .automatic)
Swift 3.0.1:
Swift 3.1 Xcode 8.3.3 Réponse 🙂
La problème est - chaque section inclut l'en-tête de cours, si la section est:
section = en-tête + pied + lignes
La réponse est - rechargement de lignes directement par IndexPath.
Exemple:
Disons que vous avez 1 section dans votre table et "tableau" de quelque chose que vous utilisez comme source de données pour la table:
let indexes = (0..<array.count).map { IndexPath(row: $0, section: 0) }
Maintenant, nous avons du tableau de l'index de la cellule que nous voulons pour recharger, donc:
tableView.reloadRows(at: indexes, with: .fade)
Je ne sais pas pourquoi les mauvaises réponses de upvotes.
Remarque:
UITableView.reloadData()
recharger toute la table. Docs sur reloaddataUITableView.reloadSections(_ sections: IndexSet, with animation: UITableViewRowAnimation)
recharger section spécifique( y compris la section d'en-tête et pied de section). Docs sur reloadsectionsUITableView.reloadRows(at indexPaths: [IndexPath], with animation: UITableViewRowAnimation)
recharger les lignes spécifiées. Docs sur reloadRowsDonc ici
reloadSections
ne fonctionne ici. Si votre section en-tête de l'état et les données changent pas, appelez cette méthode ne fera pas de diffrence par la vue.Solution: utilisation
reloadRows
pour charger les lignes de toutes les sections ou de la section. Remarque: ici, vous pouvez simplement charger les lignes visibles, d'autres vont être chargés lorsque vous faites défiler jusqu'à afficher. Vous pouvez également consulter Obtenez tous les indexPaths dans une section pour plus de solutionsreloadRows
ma tête va également recharger, Dans mon cas, ma tête est cachée. Si vous avez une solution pour ce problème spécifique, s'il vous plaît laissez-moi savoir.Swift 5