我想顯示一個用戶列表與圖像。下面是代碼Swift 3:tableView複製從Firebase加載的圖像
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! UserListTableViewCell
let message = messages[indexPath.row]
cell.message = message
return cell
}
在UserListTableViewCell文件,我下載的圖片(也使用高速緩存),並展示在桌子上了。但是我發現有些行具有重複/重複的圖像。重新加載時,重複項消失,但它重新垂直滾動。
這裏是UserListTableViewCell文件:
import UIKit
import Firebase
class UserListTableViewCell: UITableViewCell {
@IBOutlet weak var username: UILabel!
@IBOutlet weak var textMessage: UILabel!
@IBOutlet weak var timeLabel: UILabel!
@IBOutlet weak var userImage: UIImageView!
var message: Message? {
didSet {
if let id = message?.chatPartnerID() {
let database = Database.database().reference()
let ref = database.child("Users").child(id)
ref.observeSingleEvent(of: .value, with: {
(snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
self.username.text = dictionary["username"] as? String
if let profileImageUrl = dictionary["image"] as? String, profileImageUrl != "" {
self.userImage.image = UIImage(named: "blank-user")
self.userImage.loadImageFromCacheWithUrlString(urlString: profileImageUrl)
self.userImage.layer.cornerRadius = self.userImage.frame.size.width/2
self.userImage.clipsToBounds = true
} else {
self.userImage.image = UIImage(named: "blank-user")
self.userImage.layer.cornerRadius = self.userImage.frame.size.width/2
self.userImage.clipsToBounds = true
}
}
}, withCancel: nil)
}
textMessage.text = (message?.text)! + " " + (message?.chatPartnerID())!
if let seconds = message?.timestamp?.doubleValue {
let timestampDate = Date(timeIntervalSince1970: seconds)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm a"
timeLabel.text = dateFormatter.string(from: timestampDate)
}
//userImage.image = message?.
}
} }
圖片下載擴展文件:
extension UIImageView {
func loadImageFromCacheWithUrlString(urlString: String) {
if urlString != "" {
self.image = nil
if let cachedImage = imageCache.object(forKey: urlString as AnyObject) {
self.image = cachedImage as? UIImage
self.contentMode = .scaleAspectFill
return
}
let url = URL(string : urlString)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
if error != nil {
print(error!)
return
}
DispatchQueue.main.async(execute: {
if let downloadedImage = UIImage(data: data!) {
imageCache.setObject(downloadedImage, forKey: urlString as AnyObject)
self.image = downloadedImage
self.contentMode = .scaleAspectFill
}
})
}).resume()
}
}
}
你是怎麼寫的叫在'cell.message'的代碼? – Larme
Reuse cell set nil image view –
在UserListTableViewCell中分享您的圖片查看代碼 –