Saya menerapkan tajuk bagian yang dapat diciutkan dalam UITableViewController.
Inilah cara saya menentukan berapa banyak baris untuk ditampilkan per bagian:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return self.sections[section].isCollapsed ? 0 : self.sections[section].items.count
}
Ada struct yang menyimpan info bagian dengan bool untuk 'isCollapsed'.
Inilah cara saya mengubah status mereka:
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()
}
Semuanya berfungsi dan menjiwai dengan baik, namun di konsol ketika menutup bagian yang diperluas, saya mendapatkan [Tegas] ini:
[Tegaskan] Tidak dapat menentukan indeks baris global baru untuk preReloadFirstVisibleRow (0)
Ini terjadi, terlepas dari apakah itu Bagian yang sama dibuka, ditutup (runtuh), atau jika saya membuka bagian lain dan 'menutup otomatis' bagian yang sebelumnya terbuka.
Saya tidak melakukan apa pun dengan data; itu gigih.
Adakah yang bisa membantu menjelaskan apa yang hilang? Terima kasih