Ich implementiere reduzierbare Abschnittsüberschriften in einem UITableViewController.
So bestimme ich, wie viele Zeilen pro Abschnitt angezeigt werden sollen:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return self.sections[section].isCollapsed ? 0 : self.sections[section].items.count
}
Es gibt eine Struktur, die die Abschnittsinformationen mit einem Bool für 'isCollapsed' enthält.
So schalte ich ihre Zustände um:
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()
}
Alles funktioniert und animiert gut, aber in der Konsole beim Ausblenden eines erweiterten Abschnitts erhalte ich Folgendes: [Assert]:
[Assert] Neuer globaler Zeilenindex für preReloadFirstVisibleRow (0) kann nicht ermittelt werden
Dies geschieht unabhängig davon, ob es sich um denselben geöffneten Abschnitt handelt, der geschlossen (reduziert) wird oder ob ich einen anderen Abschnitt öffne und den zuvor geöffneten Abschnitt automatisch schließe.
Ich mache nichts mit den Daten; das ist hartnäckig.
Könnte jemand helfen zu erklären, was fehlt? Vielen Dank