如何在没有它消失/重新出现在Swift中的情况下重新加载节标题?

时间:2017-04-28 07:36:51

标签: ios swift uitableview

首先,我要说我在我的UITableViewController中使用UITableView自定义标题。

我的自定义标题类的定义如下:

class HeaderCell: UITableViewCell
{
    @IBOutlet var theLabel: UILabel!
    @IBOutlet var theCountLabel: UILabel!

    override func awakeFromNib()
    {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
}

我像这样加载自定义标题类:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
{
    let headerCell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell") as! HeaderCell

    if section == 0
    {
        headerCell.theLabel.text = "Test 1"
        headerCell.theCountLabel.text = String(myArrayOne.count)
    }
    else if (section == 1)
    {
        headerCell.theLabel.text = "Test 2"
        headerCell.theCountLabel.text = String(myArrayTwo.count)
    }

    return headerCell.contentView
}

每次从editActionsForRowAt内删除表格视图中的一行时,我都会调用self.tableView.reloadSections

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?
{
    ...

    var indexSet: IndexSet = IndexSet()

    indexSet.insert(indexPath.section)

    if indexPath.section == 0
    {
        self.myArrayOne.remove(at: indexPath.row)
    }
    else if indexPath.section == 1
    {
        self.myArrayTwo.remove(at: indexPath.row)
    }

    self.tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.none)
    self.tableView.reloadSections(indexSet, with: UITableViewRowAnimation.none)

}

现在调用self.tableView.reloadSections确实有效,并更新了我的部分标题中的theCountLabel

但是,我已将UITableViewRowAnimation设为none。但是,当我向下滚动UITableView时,屏幕上显示当前可见行数并删除一行时,节标题将消失并重新显示,并显示更新的theCountLabel值。

我希望始终将我的节标题保持在最顶层,即不会消失并在重新加载该节时重新显示。

有没有其他方法可以实现这个目标?

由于

1 个答案:

答案 0 :(得分:1)

找到@Abhinav引用的解决方案:

Reload tableview section without scroll or animation

针对 Swift 3.0 进行了轻微修改:

UIView.performWithoutAnimation {

    self.tableView.beginUpdates()
    self.tableView.reloadSections(indexSet, with: UITableViewRowAnimation.none)
            self.tableView.endUpdates()

}

现在,如果我滚动浏览屏幕上的可见单元格数量并删除一行,则我的节标题中的headerCell.theCountLabel.text会在没有任何动画的情况下更新,并保持静止。