删除表行(如果它等于某个值)

时间:2017-10-20 13:04:26

标签: ios uitableview

我正在尝试在表上显示用户列表,并删除包含当前用户的行。我查看了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
}

4 个答案:

答案 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.usersUserManager.shared.filteredUsers中使用numberOfRows使用cellForRowAt

当然,如果用户不进行更改,最好先对过滤后的用户进行预先计算,而不是每次访问UserManager.shared.filteredUsers时对其进行计算。但是你明白了。

答案 2 :(得分:0)

我不完全确定您要显示的用户在哪里。如果它们在一个数组中,只需创建一个新数组,并将要删除的行排除在外,或者只使用removeAtIndexPath从现有数组中删除它们。

之后,如有必要,只需重新加载tableView。

请不要忘记您还需要使用

更新numberOfRows

return 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
}