おはよう!非常に簡単な質問です。 dequeueReusableCellを使用してカスタムセルをバックグラウンドで読み込みます。私は、URLから読み込んだ画像を持っています。UITableViewは、バックグラウンドですべてのセルを一度読み込みます。
問題は私がスクロールを開始するときです。 TableViewは同期してセルの再読み込みを開始するので、異なるコンテンツで「点滅」します。
ゆっくりとスクロールすると、点滅し、最終的には正しい内容でセルを埋めますが、速くすると内容がシャッフルされます。面白いですが、それでも問題です。
私は一番良い解決策は、セルを一度ロードして静的テーブルをスクロールすることだと思います。出来ますか??
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if self.dialogs[indexPath.item].fromID == profileID {
let cell = tableView.dequeueReusableCell(withIdentifier: "dialogMeCell", for: indexPath) as! CellForDialogMe
DispatchQueue.global().async {
let photoURL = self.partners[indexPath.item].userPhoto as! String
let imageData = try? Data(contentsOf: URL(string: photoURL.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!)!)
let partnerPhoto = UIImage(data: imageData!)
DispatchQueue.main.async {
let partnerName = "\(self.partners[indexPath.item].userName!) " + "\(self.partners[indexPath.item].userSurname!)"
var messageText = ""
if self.dialogs[indexPath.item].hasAttachments! == true {
messageText = "Attachment"
}
else {
messageText = self.dialogs[indexPath.item].text!
}
if self.dialogs[indexPath.item].readState == false {
cell.message.textColor = UIColor.white
cell.message.backgroundColor = UIColor(red: 0.561, green: 0.651, blue: 0.757, alpha: 1.00)
}
cell.fillWithContent(partnerPhoto: partnerPhoto!, partnerName: partnerName, message: messageText, selfPhoto: self.profilePhoto!)
}
}
return cell
}
else {
let cell = tableView.dequeueReusableCell(withIdentifier: "dialogHimCell", for: indexPath) as! CellForDialogHim
DispatchQueue.global().async {
let photoURL = self.partners[indexPath.item].userPhoto as! String
let imageData = try? Data(contentsOf: URL(string: photoURL.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!)!)
let partnerPhoto = UIImage(data: imageData!)
DispatchQueue.main.async {
let partnerName = "\(self.partners[indexPath.item].userName!) " + "\(self.partners[indexPath.item].userSurname!)"
var messageText = ""
if self.dialogs[indexPath.item].hasAttachments! == true {
messageText = "Attachment"
}
else {
messageText = self.dialogs[indexPath.item].text!
}
if self.dialogs[indexPath.item].readState == false {
cell.partnerName.textColor = UIColor.white
cell.message.textColor = UIColor.white
cell.backgroundColor = UIColor(red: 0.561, green: 0.651, blue: 0.757, alpha: 1.00)
}
cell.fillWithContent(partnerPhoto: partnerPhoto!, partnerName: partnerName, message: messageText)
}
}
return cell
}
}
ありがとう!