如何在动态tableView Swift中删除行

时间:2018-05-16 19:58:20

标签: ios swift uitableview

这是我的问题。我有一个用户数组,我正在检查用户电话号码是否在地址簿中我想在tableView中显示用户。

 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return users.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! UserCell

    let user = users[indexPath.row]
    let contact = searchForContactUsingPhoneNumber(phoneNumber: user.phoneNumber!)
    if contact == true {
        cell.textLabel?.text = user.name
        cell.detailTextLabel?.text = user.phoneNumber
        cell.backgroundColor = UIColor(r: 35, g: 35, b: 35)
        cell.textLabel?.textColor = UIColor.white
        cell.detailTextLabel?.textColor = UIColor.white

        if let profileImageUrl = user.profileImageUrl {
        cell.profileImageView.loadImageUsingCacheWithUrlString(profileImageUrl)

        } else {
            tableView.deleteRows(at: [indexPath], with: .automatic)
            tableView.reloadData()
        }
    }
    return cell
}

这就是我所拥有的。如果电话号码不在地址簿中,则会删除用户行,但会留下白色的行。

1 个答案:

答案 0 :(得分:2)

您不应该在cellForRowAt中修改表格中的单元格数量,或重新加载tableview。最好先过滤用户数组,然后使用生成的过滤后的数组作为数据源。

有点像

let usersWithPhoneNumbers = users.filter { $0.profileImageUrl != nil && searchForContactUsingPhoneNumber(phoneNumber: $0.phoneNumber!) }

然后在numberOfRows和cellForRow方法中使用usersWithPhoneNumbers数组。