2017-06-08 14 views
0

Hallo an alle lieben Freunde. Ich habe ein Problem mit der Wiederverwendung von Zellen. In der Praxis wähle ich mehrere Zellen aus. In der Methode "didSelected" ändere ich eine Eigenschaft namens "isSelectedCell" auf "true" und füge einen grünen Rand hinzu (um die Auswahl anzugeben). Während in der "didDeselect" -Methode trage ich es falsch und entferne die Farbe der Grenze. Aber wenn ich nach unten scrolle, scheinen einige Zellen nie ausgewählt zu sein und die Eigenschaft ist wahr. Weil? Wie verhindere ich dies? Es scheint, dass wenn eine Zelle wiederverwendet wird, die Eigenschaften alte und nicht ihre eigenen annehmen.Cell reuse bug in collectionView

+4

geben Sie uns den Code auf, was Sie getan haben –

Antwort

1

Wenn Sie eine benutzerdefinierte Zelle verwenden, außer Kraft setzen prepareForReuse und setzen Sie alle Eigenschaften auf die Standardwerte

override func prepareForReuse() { 
    super.prepareForReuse() 
    // reset custom properties to default values 
} 
0

Zellen zur Wiederverwendung sind, bedeutet sie Anzahl von Ansichten nur festgelegt werden, die wieder verwendet werden. Sie müssen Zellen für jedes Element aktualisieren, das in dieser Zelle in collectionView cellForItemAtIndexPath Methode angezeigt werden soll. Sie müssen es in eine Datenquelle wie ein Array von Objekten einfügen, um den korrekten Wert für jedes Element zurückzugeben. Daher wird daran erinnert, welche Eigenschaft auf dem Gegenstand angezeigt wird. Wiederverwendbare Zellen sind erforderlich, um den Gerätespeicher nicht aufzublähen und dieselben Ansichten wiederzuverwenden.

+0

So die Property, erstellt von mir, "isSelectedCell", die in "didSelect" und "didDeselect" -Methoden ändert, sollte ich es im Speicher speichern! Ich kann es nicht nur innerhalb der Instanz der Zelle speichern, da es wiederverwendet wird. Richtig? –

+0

Erstellen Sie ein Modell. Wie ein Array dieser Objekte. Lassen Sie Sammlung = [MyObject](). MyObject speichert Ihre isSelected-Eigenschaft. Und Sie können es leicht mit indexPath als Index für Ihr Array erhalten und prüfen, ob die Zelle ausgewählt ist oder nicht. Oder aktualisieren Sie diese Eigenschaft, um das nachfolgende Verhalten anzuzeigen. – amber

+0

Hier könnte MyObject Klasse oder Struktur vielleicht enum sein. Ich hoffe du bekommst es jetzt. – amber

0

ist es wegen der Wiederverwendung von CollectionView Zelle.

, wie Sie in this article

sehen können, wenn eine Zelle verschwinden, die es ebenfalls verwendet die neuen zu sein, die erscheinen würden.