Tôi đang triển khai các tiêu đề phần có thể thu gọn trong UITableViewControll.
Đây là cách tôi xác định có bao nhiêu hàng để hiển thị trên mỗi phần:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return self.sections[section].isCollapsed ? 0 : self.sections[section].items.count
}
Có một cấu trúc chứa thông tin phần với một bool cho 'isCollapsed'.
Đây là cách tôi chuyển đổi trạng thái của họ:
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()
}
Mọi thứ đều hoạt động và hoạt hình độc đáo, tuy nhiên trong bảng điều khiển khi thu gọn phần mở rộng, tôi nhận được [Khẳng định]:
[Khẳng định] Không thể xác định chỉ mục hàng toàn cầu mới cho preReloadFirstVisibleRow (0)
Điều này xảy ra, bất kể đó là Phần mở giống nhau, đóng (thu gọn) hoặc nếu tôi đang mở một phần khác và 'tự động đóng' phần mở trước đó.
Tôi không làm gì với dữ liệu; đó là cố chấp.
Bất cứ ai có thể giúp giải thích những gì còn thiếu? Cảm ơn