这是我的问题。我有一个用户数组,我正在检查用户电话号码是否在地址簿中我想在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
}
这就是我所拥有的。如果电话号码不在地址簿中,则会删除用户行,但会留下白色的行。
答案 0 :(得分:2)
您不应该在cellForRowAt中修改表格中的单元格数量,或重新加载tableview。最好先过滤用户数组,然后使用生成的过滤后的数组作为数据源。
有点像
let usersWithPhoneNumbers = users.filter { $0.profileImageUrl != nil && searchForContactUsingPhoneNumber(phoneNumber: $0.phoneNumber!) }
然后在numberOfRows和cellForRow方法中使用usersWithPhoneNumbers数组。