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
Antwort
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
}
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.
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? –
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
Hier könnte MyObject Klasse oder Struktur vielleicht enum sein. Ich hoffe du bekommst es jetzt. – amber
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.
- 1. UITableView und Cell Reuse
- 2. Swift: Update CollectionView Cell Image
- 3. Cell versteckten Bug
- 4. Cell-Neuordnung in CollectionView in iOS
- 5. UICollectionView Cell-Teilansicht ändert sich nach collectionView: cellForItemAtIndexPath ist vollständig
- 6. Collectionview Cell Delegate-Methode wird nicht bei scrollToItemAtIndexPath aufgerufen?
- 7. Reuse Identifier on iCarousel
- 8. Steuerung collectionView Scrollen innerhalb von collectionView Zelle
- 9. Reuse Pfadobjekt in XAML
- 10. Reuse Matrix in Glm?
- 11. Reuse-Fragment in AlertDialog
- 12. Doppelte Nachrichten Bug
- 13. 3D Touch nicht in CollectionView
- 14. Reuse Gurkenschritte
- 15. Xcode UICollectionview Cell Align Left
- 16. UICollectionView dynamic cell overlap Problem
- 17. UICollectionView Wrap Cell um Label
- 18. CollectionView nicht letzten Abschnitt anzeigen
- 19. UILabel unter UICollectionView Cell hinzufügen
- 20. CollectionView mit Bildern in einem TableViewCell
- 21. PHP Cassandra Session Reuse
- 22. Bild in CollectionView von der Galerie anzeigen
- 23. Java Libraries Reuse
- 24. Angular 2 Reuse Komponentenselektor
- 25. Reuse jQuery.post()/jQuery.Deferred() Objekt
- 26. WPF Style Reuse
- 27. Selenium Page Object Reuse
- 28. iOS - UITableView in einem horizontalen CollectionView, horizontal collectionView in VerticalScrollView
- 29. Reuse floatActionButton android
- 30. collectionview nur ein Bild in CellForItemAtIndexPath herunterladen
geben Sie uns den Code auf, was Sie getan haben –