如何刷新UITableViewCell内的数据?

时间:2017-09-28 23:09:31

标签: ios swift uitableview

viewController1 didSelectRow将用户带到viewController2。在那里选择一个值后,该值将被转回,并应显示在viewController1中。数据正在通过。我添加了一个逻辑来检查是否在cellForRow viewController1内收到了数据。仍然显示旧数据。如何仅刷新该单元格的数据而不是tableView.reloadData()

如果从viewController2

成功收到数据,则indexPath.row需要解除不同类型的单元格

3 个答案:

答案 0 :(得分:2)

使用 reloadRows(at:[IndexPath],with:UITableViewRowAnimation),并为需要更新的行指定索引路径。

答案 1 :(得分:1)

我遇到了类似的情况,我的解决方案是添加一个属性来记录用户点击的索引路径。 并在视图中刷新此索引路径将出现

var leaveAtIndexPath: IndexPath?
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    leaveAtIndexPath = indexPath
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if leaveAtIndexPath != nil {
        tableView.reloadRows(at: [leaveAtIndexPath], with: .none)
        leaveAtIndexPath = nil
    }
}

答案 2 :(得分:0)

你可以做到

reloadRows(at: [IndexPath], with: UITableViewRowAnimation)

重新加载行,然后在 cellForRowAt 中,您可以使用标记来查看用户是否已选择单元格或数据是否已更改。

var userHasSelected[IndexPath:Bool] = [:] // populate this with your cell data 
if userHasSelected[indexpath] {
    let cell = tableView.dequeueReusableCell(withIdentifier: "userSelected", for: indexPath)
else {
    let cell = tableView.dequeueReusableCell(withIdentifier: "userNotSelected", for: indexPath)
}

这就是我要做的。