Ok, brauche ein wenig Hilfe hier. Ich bin neu in Swift. Hier ist mein Problem.Wiederverwendbare Zelle ruft PrepareForReuse Funktion nicht
Beim Abrufen von Daten für meine UITableView rufe ich Bilddaten von einer URL auf, daher gibt es eine leichte Verzögerung, wenn wiederverwendete Zellen abgerufen werden, was dazu führt, dass die Zelle eine halbe Sekunde alte Daten anzeigt. Ich habe versucht, func prepareForReuse aufzurufen, um Eigenschaften zurückzusetzen, aber es scheint nicht zu funktionieren. Jede Hilfe wird geschätzt!
Hier ist mein Code, wenn die Zelle Aufruf:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.alpha = 0
let book = books[indexPath.row]
cell.textLabel?.text = book.bookTitle
cell.detailTextLabel?.text = book.postURL
let url = URL(string: book.postPicture)
DispatchQueue.global().async {
let data = try? Data(contentsOf: url!)
DispatchQueue.main.async {
cell.alpha = 0
cell.backgroundView = UIImageView(image: UIImage(data: data!))
UIView.animate(withDuration: 0.5, animations: {
cell.alpha = 1
})
}
}
cell.contentView.backgroundColor = UIColor.clear
cell.textLabel?.backgroundColor = cell.contentView.backgroundColor;
cell.detailTextLabel?.backgroundColor = cell.contentView.backgroundColor;
func prepareForReuse(){
cell.alpha = 0
cell.backgroundView = UIImageView(image: UIImage(named: "book.jpg"))
}
return cell
}
Sie können 'prepareForReuse' auf diese Weise nicht überschreiben. Sie müssen die Klasse 'UITableViewCell' ableiten und sie in der Deklaration der Unterklasse überschreiben. Und Sie müssen das Ergebnis von 'dequeueReusableCell (withIdentifier: for:)' in Ihre Unterklasse eingeben. Außerdem sollten Sie Ihre Bilder technisch zuerst asynchron auf die Festplatte herunterladen und dann von der Festplatte in die Bildansicht laden, während der Benutzer scrollt. –
Ok, hast du ein Beispiel wie das funktionieren würde? – Gerrit