CollectionView pull to refresh

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CollectionView pull to refresh

    Moin,

    ich möchte wenn man die CollectionView runter zieht, dass der Inhalt neu geladen wird.

    Folgendes habe ich:

    private let refreshControl = UIRefreshControl()

    collectionView?.addSubview(refreshControl)

    collectionView?.alwaysBounceVertical = true
    refreshControl.addTarget(self, action: #selector(refreshByControl), for: UIControlEvents.valueChanged)
    refreshControl.attributedTitle = NSAttributedString(string: "Lädt")

    @ObjC func refreshByControl(){
    DispatchQueue.main.async {
    self.data = [EventModel]()
    self.loadEventData()
    }
    }

    Das funktioniert auch erstmal alles soweit. Manchmal bekomme ich aber eine Fehlermeldung in "cellForItemAt" das der Indexpath.row nicht passt. Haben wohl einige das Problem im Netz. Viele sagen das man in cellForItemAt abfragne soll ob er noch refresht oder nicht mit refreshControl.isRefreshing. Da meckert er bei mir und will auf jedenfall das eine Zelle zurückgegeben wird.

    Füge ich folgendes ein funktioniert es self.collectionView?.reloadData()



    @ObjC func refreshByControl(){
    DispatchQueue.main.async {
    self.collectionView?.reloadData()
    self.data = [EventModel]()
    self.loadEventData()
    }
    }

    Flackert aber unschön.

    Jemand eine Idee?
  • Index out of range spricht für mich dafür, dass es ein Problem bei den Daten für den CollectionView gibt.

    Evtl. liefert collectionView(_:numberOfItemsInSection:) einen falschen Wert zurück. Anderenfalls sollte es keinen Index out of range geben.

    Ist im EventModel evtl. zuerst die Anzahl der Daten bekannt, bevor die Daten tatsächlich vorhanden/geladen sind?