2017-06-08 7 views
0

ich eine UICollectionView in einem UITableViewCell haben. Sie können das Bild beziehen sich auf hereSwift 3 - Reload UICollectionView innerhalb des UITableViewCell

ich die Collection nachladen möchte, ob Updates passieren.

Ich habe einige Nachforschungen gemacht und fanden diese:

  1. how to reload a collectionview that is inside a tableviewcell
  2. Reloading collection view inside a table view cell happens after all cells in table view have been loaded
  3. UICollectionView not updating inside UITableViewCell

ich die @IBOutlet weak var collectionView: UICollectionView!UITableViewCell-UITableViewController bei cellForRowAt genannt. Hier

ist der Code:

var refreshNow: Bool = false 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: Storyboard.allCardCell, for: indexPath) as! AllCardTableViewCell 

     if refreshNow { 
      cell.collectionView.reloadData() 
      refreshNow = false 
     } 

     cell.collectionView.collectionViewLayout.invalidateLayout() 
     return cell 
    } 

Wenn der Benutzer Ok auf UIAlertAction klicken:

let alert = UIAlertController(title: "Success", message: "Card successfully added", preferredStyle: .alert) 
       let action = UIAlertAction(title: "Ok", style: .default) { (action) in 
        self.refreshNow = true 
        self.tableView.reloadData() 
       } 
       alert.addAction(action) 
       self.present(alert, animated: true, completion: nil) 

Der Grund, warum ich die refreshNow gesetzt ist, um die Anwendungen von hinken und langsam zu verhindern. Aber immer noch nicht aktualisiert, wenn irgendwelche Änderungen passieren.

Das Problem ist die Collection hat aufzufrischen nicht. Aber wenn ich debugge, ging es durch die cell.collectionView.reloadData().

Das Update/Änderungen nur dann geschehen, wenn ich die apps neu starten. Ich möchte, dass es so genannt wird real-times Update.

Jede Hilfe ist wirklich und vielen Dank geschätzt.

Bildkredit: How to use StoryBoard quick build a collectionView inside UITableViewCell

+0

versuchen, Neuladen von Daten auf Haupt-Thread mit Dispatch-Warteschlange. –

+0

@TusharSharma welcher Teil? bei 'cellForRowAt'? – Sariyanti

+0

ja rufen Sie eine Dispatch-Warteschlange dort und in ihr rufen Sie Datenlinie neu laden. –

Antwort

-1

In Ihrem Fall sollten Sie Tag zu Ihrer Sammlung Ansicht zuordnen, um den Zugriff außerhalb der cellForRowAt Funktion zu erhalten.

Dies ist, wie Sie Ihre Funktion sollte wie folgt aussehen:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: Storyboard.allCardCell, for: indexPath) as! AllCardTableViewCell 

    cell.collectionView.tag = 1234 
    return cell 
} 

und die Aktion erneut zu laden, die Collection unter Verwendung des Tag-Zugriff wird

let action = UIAlertAction(title: "Ok", style: .default) { (action) in 
    let collectionView = self.tableView.viewWithTag(1234) as! UICollectionView 
    collectionView.reloadData() 
} 

beachten Nehmen Sie auch, dass cellForRowAt die nachladen halten Inhalt basiert, was Sie jedes Mal, wenn die Zelle erscheint, darin eingefügt haben. Also, aktualisieren Sie Ihre Daten außerhalb der cellForRowAt Funktion.

+0

Es wurde nicht aktualisiert. Nichts passiert. – Sariyanti

+0

Ich habe Tabellenansicht-Controller, dass eine der Zellen Sammlungsansicht hat, dass dieser Code abstürzen wird. CollectionView = self.tableView.viewWithTag (1234) as! UICollectionView –

0

Weil wiederverwendet Sie UITableViewCell so euch alle Tage Ihr UICollectionView nachladen muss. Wenn Sie refreshNow verwenden UICollectionView neu zu laden, auf die Zelle haben refreshNow = false, UICollectionView wird wie Zelle angezeigt, es ist = wiederverwendet> falsch enter image description here

Udate rep:

See, in Bild UITableViewCell 1 wird wiederverwenden bei Index 6.Wenn Sie den Inhalt der Zelle nicht neu laden (reload collectionview), wird es wie uitableviewcell 1 bei Index 0 angezeigt

+0

Ich habe dich nicht bekommen. Könnten Sie bitte genauer? – Sariyanti

Verwandte Themen