获取要重新加载行的值的特定 IndexPath



现在,我正在使用此代码来更新用户的在线状态。每次在线状态更改时,我的整个表视图都会重新加载:

// Get and update the actual online stats for the users
UserApi.shared.getUserOnlineStatus { (onlineStatus) in
if let user = self.users.first(where: {$0.uid == onlineStatus.keys.first}) {
let values = onlineStatus.values.first as? Array<Any>
let onlineStatus = values?[0]
user.onlineStatus = onlineStatus as? Bool
}
self.tableViewUsers.reloadData()
}
}

我不是专家,但我感觉我应该只重新加载受影响的行。

如何获取特定的索引路径

self.users.first(where: {$0.uid == onlineStatus.keys.first}(

,所以我可以重新加载行吗?

编辑,工作代码:

// Get and update the actual online stats for the users
UserApi.shared.getUserOnlineStatus { (onlineStatus) in
if let user = self.users.first(where: {$0.uid == onlineStatus.keys.first}) {
let values = onlineStatus.values.first as? Array<Any>
let onlineStatus = values?[0]
user.onlineStatus = onlineStatus as? Bool
}
if let index = self.users.firstIndex(where: {$0.uid == onlineStatus.keys.first}) {
self.tableViewUsers.reloadRows(at: [IndexPath(row: index, section: 0)], with: .none)
}
}
}

尝试,

UserApi.shared.getUserOnlineStatus { (onlineStatus) in
if let user = self.users.first(where: {$0.uid == onlineStatus.keys.first}) {
let values = onlineStatus.values.first as? Array<Any>
let onlineStatus = values?[0]
user.onlineStatus = onlineStatus as? Bool
if let index = self.users.firstIndex(of: user) {
self.tableViewUsers.reloadRows(at: [IndexPath(row: index, section: 0)], with: .automatic)
}
}
}

首先,您需要在用户列表中获取已修改用户的索引,然后使用 UITableView 函数重新加载该索引处的行[reloadRows(at:with:)]

最新更新