如何阻止TableViewCell重复图像

时间:2017-07-17 18:50:41

标签: ios swift uitableview

我将联系人导入我的应用程序并将其插入到tableview中。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: importCellId, for: indexPath) as! tbcImportContact
    cell.contact = contacts[indexPath.row]
    return cell
}

当我设置联系人图片时,就像我在这里一样:

var contact: Contact? {
    didSet {
        if let name = contact?.name {
            nameLabel.text = name
        } else {
            nameLabel.text = ""
        }
        if let img = contact?.contactImage {
            contactImage.image = img
        } else {
            contactImage.image = UIImage(named: "emptyProfile")
        }
    }

下一次与nil图片的联系应该会收到UIImage(named: "emptyProfile"),但联系人会被分配以前的联系人图片。

我尝试添加else语句以防止这种情况,但它不起作用。 我也尝试过添加:

override func prepareForReuse() {
    self.contactImage.image = UIImage(named: "emptyProfile")
    self.nameLabel.text = ""
}

在为其分配联系人时重置单元格,但也无效。 我也尝试在主线程上设置异步,但也没有用。

有关我可以尝试解决此问题的任何建议吗?

1 个答案:

答案 0 :(得分:1)

当我导入这样的联系人时,我最终只是设置了单元格的图像:

  if let imageData = contact.imageData {
                    image = UIImage(data: imageData)
                } else {
                    image = UIImage(named: "contactProfile")
                }

这是关于我如何导入联系人的代码:

do {
        let keysToFetch = keys as [CNKeyDescriptor]
        try contactsStore.enumerateContacts(with: CNContactFetchRequest(keysToFetch: keysToFetch)) {
            (contact, cursor) -> Void in
            for phoneNumber in contact.phoneNumbers {
                let phoneNumberString = phoneNumber.value.stringValue
                if let imageData = contact.imageData {
                    image = UIImage(data: imageData)
                } else {
                    image = UIImage(named: "contactProfile")
                }

                let emailAddress = contact.emailAddresses.count > 0 ? contact.emailAddresses[0].value : ""
                let postalAddress = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value)" : ""                    
                self.contacts.append(Contact(name: contact.givenName, phoneNumber: phoneNumberString, contactImage: image, email: emailAddress as String , address: postalAddress))
            }
        }

        if contacts.count == 0 {
            message = "No contacts found."
        }
    } catch {
        message = "Unable to fetch contacts."
    }