何时更新tableView?

时间:2019-04-25 07:28:42

标签: ios swift uitableview

我正在构建一个待办事项列表应用程序,其中我使用我的部分标题来显示有关流程的信息。通过字符串操作,我在其中显示了有关待办事项的一些值。但是要始终保持最新状态,我只知道reloadData()命令。但是尝试自动删除行确实很糟糕。

所以我的问题是如何以一种干净的方式而不是通过reloadData()来更新标题文本。

在这里您将待办事项标记为已完成:

alert.addAction(UIAlertAction(title: "Done", style: .default, handler: { (action) in

        if indexPath.section == 0 {
            self.goals.remove(at: indexPath.row)
        } else {
            self.goalsB.remove(at: indexPath.row)
        }
        self.counter+=1
        self.saveDefaults()
        tableView.deleteRows(at: [indexPath], with: .automatic)
    }))

这是设置我的标题的地方:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let label = UILabel()
    label.textColor = UIColor.white
    label.backgroundColor = section == 0 ? UIColor(red: 41 / 255.0, green: 76 / 255.0, blue: 103 / 255.0, alpha: 1.0) : UIColor(red: 235 / 255.0, green: 108 / 255.0, blue: 33 / 255.0, alpha: 0.5)

    if section == 0 {

        label.text = "     \(counter) goals completed / \(goals.count) outstanding"

    }

    return label
}

2 个答案:

答案 0 :(得分:1)

如果您事先知道必须更新哪个特定节的标题,则可以使用TableView.reloadSection()方法。

答案 1 :(得分:0)

您可以在UIView上使用过渡API。

UIView.transition(with: label,
              duration: 0.25,
               options: .transitionCrossDissolve,
               animations: { [weak self] in
                  self?.label.text = "\(counter) goals completed / \(goals.count) outstanding"
         }, completion: nil)