2017-11-02 1 views
0

Entfernen und Hinzufügen der Sammlungsansicht erneut mit neuen Daten, aber immer noch mit den alten Daten. (Nicht Nachladen benötigen, brauchen nur zu entfernen und Sammlung Ansicht wieder mit neuen Daten hinzufügen)Wie kann man UICollectionView von der übergeordneten Ansicht entfernen und hinzufügen, ohne die vorherigen Daten zu laden?

Beschreibung: Die Frage geht wie folgt:

  • Ich bin mit zwei benutzerdefiniertes Layout Sammlung Ansichten, neu laden und paginieren sie beide.
  • Layout ungültig machen, Neuladen und Seitenumbruch läuft reibungslos, keine Probleme dabei.
  • Aber im Fall des Umschaltens Perspektive, sagen wir, von QuarterlyView zu MonthlyView, ich entfernte die gesamte Sammlung Ansicht von der übergeordneten Ansicht und wieder zeigen sie mit neuen Daten.
  • Hier tritt das Problem auf, die neue Sammlungsansicht zeigt immer noch die alten Daten an, auch nachdem das zuvor eingegebene 2D-Array durch ein neues ersetzt wurde.
  • Bitte beachten Sie, dass ich bei der Wechsel Perspektive, nur die Sammlung-Ansicht mit neuen Daten entfernen und hinzufügen, nicht neu laden.

Das ist genau das, was ich in schnellen tue:

func onSwitchingPerspective(url: String) { 

headerArray.removeAll() // REMOVED THE HEADER AND CONTENT ARRAY 
contentArray.removeAll() 

self.customHeaderCollectionView.removeFromSuperview() // REMOVED THE HEADER AND CONTENT COLLECTION VIEWS 
self.customContentCollectionView.removeFromSuperview() 


DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async { // NEED GLOBAL QUEUE TO CALL API AND LATER UPDATE UI ON MAIN THREAD 

(self.headerArray, self.contentArray) = self.getEventsData(URL: url) 

DispatchQueue.main.async { 

self.showHeaderCollectionView() // ADDED THE COLLECTION VIEWS AGAIN 
self.showContentCollectionView() 

self.customContentCollectionView.collectionViewLayout.invalidateLayout() // CODE TO RELOAD BOTH THE COLLECTION VIEWS 
self.customContentCollectionView.reloadData() 
self.customContentCollectionView.scrollToItem(at: IndexPath(row: 0, section: 0), at: .top, animated: false) 
self.customHeaderCollectionView.collectionViewLayout.invalidateLayout() 
self.customHeaderCollectionView.reloadData() 
self.customHeaderCollectionView.scrollToItem(at: IndexPath(row: 0, section: 0), at: .top, animated: false) 
} 
} 
} 

Antwort

0

Ohne

self.collectionView.reloadData() 

es zeigt nur Ihre vorherigen Daten .. Sein notwendig nachladen nach dem

headerArray.removeAll() // REMOVED THE HEADER AND CONTENT ARRAY 
contentArray.removeAll() 
+0

wir haben es ausprobiert, es hat funktioniert aber nicht perfekt, da es sich um Custom Layout handelt, so ther e ist ein Problem mit der Ungültigkeit des Layouts, was zu einem Absturz der App führt. geben diesen Fehler: 'NSInternalInconsistencyException', Grund: 'UICollectionView Layout erhalten Attribute für eine Zelle mit einem Index-Pfad, der nicht existiert: {length = 2, path = 25-14}' Versuchte dies: self.customContentCollectionView.collectionViewLayout.invalidateLayout() self.customHeaderCollectionView.collectionViewLayout.invalidateLayout() – dang

Verwandte Themen