Привет всем, я застрял в странной проблеме, я перезагружаю 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
Abu Ul Hassan 28 Ноя 2018 в 08:13

1 ответ

Лучший ответ

Любой, кто может столкнуться с этой проблемой

Итак, я нашел решение, и в соответствии с этим я обнаружил, что одна вещь не использует многоразовое представление, такое как ячейка в представлении заголовка, если вам нужно перезагрузить разделы для любого действия. если вы используете ячейку, не возвращайте полную ячейку, просто верните ее 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
}
2
Abu Ul Hassan 28 Ноя 2018 в 07:43