J'implémente des en-têtes de section réductibles dans un UITableViewController.
Voici comment je détermine le nombre de lignes à afficher par section:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return self.sections[section].isCollapsed ? 0 : self.sections[section].items.count
}
Il y a une structure qui contient les informations de section avec un booléen pour 'isCollapsed'.
Voici comment je change leurs états:
private func getSectionsNeedReload(_ section: Int) -> [Int]
{
var sectionsToReload: [Int] = [section]
let toggleSelectedSection = !sections[section].isCollapsed
// Toggle collapse
self.sections[section].isCollapsed = toggleSelectedSection
if self.previouslyOpenSection != -1 && section != self.previouslyOpenSection
{
self.sections[self.previouslyOpenSection].isCollapsed = !self.sections[self.previouslyOpenSection].isCollapsed
sectionsToReload.append(self.previouslyOpenSection)
self.previouslyOpenSection = section
}
else if section == self.previouslyOpenSection
{
self.previouslyOpenSection = -1
}
else
{
self.previouslyOpenSection = section
}
return sectionsToReload
}
internal func toggleSection(_ header: CollapsibleTableViewHeader, section: Int)
{
let sectionsNeedReload = getSectionsNeedReload(section)
self.tableView.beginUpdates()
self.tableView.reloadSections(IndexSet(sectionsNeedReload), with: .automatic)
self.tableView.endUpdates()
}
Tout fonctionne et s'anime bien, mais dans la console lors de la réduction d'une section développée, j'obtiens ceci [Assert]:
[Assert] Impossible de déterminer le nouvel index de ligne global pour preReloadFirstVisibleRow (0)
Cela se produit, qu'il s'agisse de la même section ouverte, de la fermeture (repli) ou si j'ouvre une autre section et que je ferme automatiquement la section précédemment ouverte.
Je ne fais rien avec les données; c'est persistant.
Quelqu'un pourrait-il aider à expliquer ce qui manque? Merci