您好,我一直陷入一个奇怪的问题,我正在重新加载tableViewSection,并且它正确地重新加载了该部分,但是它隐藏了其他部分,直到我向上或向下滚动为止。我已使用以下代码重新加载
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if (ObjectDetails?.arrData[section].collapsed)!{
return 0
}
else{
return (ObjectDetails?.arrData[section].data.count)! - 1
}
}
@objc func collapseSection(sender:UIButton)
{
ObjectDetails?.arrData[sender.tag].collapsed = !(ObjectDetails?.arrData[sender.tag].collapsed)!
self.tableView.beginUpdates()
self.tableView.reloadSections(IndexSet(integer:sender.tag), with: .none)
self.tableView.endUpdates()
}
还请注意,如果我使用reloadData()
编写此函数,则效果很好,但这很慢
@objc func collapseSection(sender:UIButton)
{
ObjectDetails?.arrData[sender.tag].collapsed = !(ObjectDetails?.arrData[sender.tag].collapsed)!
self.tableView.reloadData()
}
答案 0 :(得分:0)
可能遇到此问题的任何人
因此,我找到了解决方案,并且据此,我发现如果需要在任何操作上重新加载节,则不要使用可重复使用的视图,例如标头视图中的单元格。 如果您使用的是单元格,则不返回完整的单元格,只需返回其contentView。
之前
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?{
let headerView = tableView.dequeueReusableCell(withIdentifier: "headerCell") as! headerCell
headerView.lblHeaderName.text = ObjectDetails?.arrData[section].data[0].key.Translate()
headerView.btnCollapse.tag = section
headerView.btnCollapse.addTarget(self, action: #selector(collapseSection(sender:)), for: .touchUpInside)
if (ObjectDetails?.arrData[section].collapsed)!
{
headerView.btnCollapse.setTitle("+", for: .normal)
}
else{
headerView.btnCollapse.setTitle("-", for: .normal)
}
return headerView
}
之后
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?{
let headerView = tableView.dequeueReusableCell(withIdentifier: "headerCell") as! headerCell
headerView.lblHeaderName.text = ObjectDetails?.arrData[section].data[0].key.Translate()
headerView.btnCollapse.tag = section
headerView.btnCollapse.addTarget(self, action: #selector(collapseSection(sender:)), for: .touchUpInside)
if (ObjectDetails?.arrData[section].collapsed)!
{
headerView.btnCollapse.setTitle("+", for: .normal)
}
else{
headerView.btnCollapse.setTitle("-", for: .normal)
}
return headerView.contentView
}