ฉันกำลังใช้ส่วนหัวของส่วนที่ยุบได้ใน UITableViewController
นี่คือวิธีที่ฉันกำหนดจำนวนแถวที่จะแสดงต่อส่วน:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return self.sections[section].isCollapsed ? 0 : self.sections[section].items.count
}
มีโครงสร้างที่เก็บข้อมูลส่วนด้วยบูลสำหรับ 'isCollapsed'
นี่คือวิธีที่ฉันจะสลับสถานะของพวกเขา:
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()
}
ทุกอย่างทำงานและเคลื่อนไหวได้ดี แต่ในคอนโซลเมื่อยุบส่วนขยายฉันได้รับ [Assert]:
[ยืนยัน] ไม่สามารถกำหนดดัชนีแถวใหม่ส่วนกลางสำหรับ preReloadFirstVisibleRow (0)
สิ่งนี้เกิดขึ้นไม่ว่าจะเป็นส่วนที่เปิดเหมือนกันการปิด (ยุบ) หรือถ้าฉันเปิดส่วนอื่นและ 'ปิดอัตโนมัติ' ส่วนที่เปิดก่อนหน้านี้
ฉันไม่ได้ทำอะไรกับข้อมูล ที่ถาวร
ใครช่วยอธิบายสิ่งที่ขาดหายไปได้บ้าง ขอบคุณ