我正在尝试在表上显示用户列表,并删除包含当前用户的行。我查看了this this帖子,但它对我不起作用。我的每个用户都有自己唯一的ID,我可以检查它是否存在。但是我不确定删除特定行所需的功能。
我试过这个:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let users = UserManager.shared.users[indexPath.row]
if(users.key == "") {
// Skip the specific user
}
return cell
}
答案 0 :(得分:1)
使表格的支持数组与您要显示的内容相匹配。换句话说,让UserManager
进行管理。
UserManager
应该为您提供一个已排除您希望避免显示的用户的数组用户。
答案 1 :(得分:1)
向您的UserManager
添加已过滤的用户属性,该属性仅包含您要显示的用户。例如,您可以使用以下计算属性:
extension UserManager {
var filteredUsers: [User] {
self.users.filter({ (user) -> Bool in
// if users.key != "key" is true, the user will be included
return users.key != "key"
})
}
}
然后,不要在UserManager.shared.users
和UserManager.shared.filteredUsers
中使用numberOfRows
使用cellForRowAt
。
当然,如果用户不进行更改,最好先对过滤后的用户进行预先计算,而不是每次访问UserManager.shared.filteredUsers
时对其进行计算。但是你明白了。
答案 2 :(得分:0)
我不完全确定您要显示的用户在哪里。如果它们在一个数组中,只需创建一个新数组,并将要删除的行排除在外,或者只使用removeAtIndexPath从现有数组中删除它们。
之后,如有必要,只需重新加载tableView。
请不要忘记您还需要使用
更新numberOfRowsreturn filteredArray.count
所以在你的if语句中只需创建新的filteredArray,否则使用现有的UserManager.shared.users
if(users.key == "") {
yourArray.remove(at: indexPath.row)
tableView.reloadData()
}
或
if(users.key == "") {
let newFilteredArray: Array = oldArray //maybe UserManager.shared.users
newFilteredArray.remove(at: indexPath.row)
tableView.reloadData()
}
答案 3 :(得分:0)
只需通过隐藏即可生成当前用户行。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
let users = UserManager.shared.users[indexPath.row]
if(users.key == "") {
return 0
}
return someFloatVlaue;//Choose your custom row height
}