从viewController1
didSelectRow
将用户带到viewController2
。在那里选择一个值后,该值将被转回,并应显示在viewController1
中。数据正在通过。我添加了一个逻辑来检查是否在cellForRow
viewController1
内收到了数据。仍然显示旧数据。如何仅刷新该单元格的数据而不是tableView.reloadData()
?
如果从viewController2
答案 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)
}
这就是我要做的。