Ich habe eine Schaltfläche innerhalb einer UICollectionViewCell
(benutzerdefinierte Klasse) in einer UICollectionView
. Wenn Sie auf die Schaltfläche klicken, ändert sich ihre Hintergrundfarbe. Funktioniert zuerst perfekt, aber wenn ich die Hintergrundfarbe der Hauptansicht ändere, kann ich die Hintergrundfarbe der Taste nicht aktualisieren. Die Hintergrundfarben in einem Array gespeichert sind, und hier sind die Zelle Set-up-Funktion:Change Button Hintergrund in UICollectionViewCell
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
print("Rebuilding cells")
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! ColorCollectionViewCell
cell.button.tappedColor = backgroundColors[section]
cell.button.originalColor = backgroundColors[section + 1]
cell.button.delegate = self
cell.button.addTarget(self, action: #selector(didHitButton), for: .touchUpInside)
return cell
}
Also, wenn ich mit section
als 1 starte, lädt es die Schaltfläche der Zelle mit der richtigen Hintergrundfarbe (schwarz, die die erste Farbe Dann setze ich die Zählung auf Null und grid.reloadData()
, die die Zellen erfolgreich löscht.
Aber wenn ich section
auf 2 setze und die Gesamtzellzahl wieder zurücksetze, nehmen die Zellen das neue nicht an Hintergrundfarbe (Farbe des Abschnitts 2 ist grün) Sie bleiben schwarz aus Abschnitt 1.
Wie würde ich dem UICollectionView
sagen, die Hintergrundfarbe der Schaltfläche in der Zelle neu zu zeichnen, wenn die Daten aktualisiert werden, wobei diese Hintergrundfarbe von einem Array kommt, das auf einer Variablen für die index
basiert?
Die Schaltfläche in der Zelle ist eine benutzerdefinierte Klasse hilft. tappedColor und originalColor legen diese Hintergrundfarbe für die Schaltfläche fest, also mache ich das. Es ist nur so, dass das erneute Laden der Daten die Werte von tappedColor und originalColor nicht auf das nächste Element im Farb-Array aktualisiert, sodass diese Änderungen der Hintergrundfarbe nicht durchgehen. – gr8m8
Nun, Debuggen, um die Ursache zu finden, ist Ihre beste Wette, setzen Sie einen Haltepunkt und überprüfen Sie bei der CellForRowAt-Methode, um zu sehen, ob Ihr Array die richtigen Werte enthält und wenn die Abschnitt Werte auch richtig kommen ... Auch, haben Sie versucht Die if-else-Methode überprüft Abschnitt Wert wie in meiner Antwort? da du dein Array mit Abschnitt und Abschnitt + 1 indizierst, wenn du zwei Abschnitte hast, dann erhältst du 0,1 und 1,2 ... –