问题:重新加载tableView部分会隐藏其他tableView部分

时间:2018-11-28 05:13:04

标签: ios swift uitableview

您好,我一直陷入一个奇怪的问题,我正在重新加载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()
}

1 个答案:

答案 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
}