0

Ich arbeite an einem Projekt in Swift 3 und es enthält eine UICollectionView in einem UITableView. Obwohl ich es geschafft habe, alle Eigenschaften meiner UICollectionviewCell-Klasse zuzuordnen, die ich vom Server bekomme, werden die Daten nach dem Ausführen des Projekts nicht in Zellen angezeigt, wenn ich nicht in meinem UITableView blättere. Die Struktur der drei Klassen wie unten. Hilfe würde sehr schätzen.UICollectionView wird nicht ordnungsgemäß neu geladen

UIView-Controller

extension ViewController : UITableViewDelegate, UITableViewDataSource { 

func numberOfSections(in tableView: UITableView) -> Int { 
    if tableView == self.allCategoriesTableView{ 
    return 4 
    } else { 
     return 1 
    } 
} 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if tableView == self.allCategoriesTableView { 
    return 1 
    }else if tableView == self.categoryTableView { 
    return categoryArray.count 
    }else{ 
    return menuBarArray.count 
    } 
} 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 

    if tableView == self.allCategoriesTableView { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "newCell", for: indexPath) as! CollectionItemsTableViewCell 
     if indexPath.section == 0 { 
      cell.fillCollectionView(with: category1) 
     }else if indexPath.section == 1 { 
      cell.fillCollectionView(with: category2) 
     }else if indexPath.section == 2 { 
      cell.fillCollectionView(with: category3) 
     } else { 
      cell.fillCollectionView(with: category3) 
     } 


    return cell 
    }else if tableView == self.categoryTableView { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryCell", for: indexPath) as! CategoryTableViewCell 
     cell.categoryNameLabel.text = categoryArray [indexPath.row] 
     cell.layer.cornerRadius = 8 
     cell.layer.masksToBounds = true 

     return cell 
    }else { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "MenuBarCell", for: indexPath) as! MenuBarTableViewCell 
     cell.menuBarContentLabel.text = menuBarArray [indexPath.row] 
     return cell 
    } 
} 

UITableViewCell Klasse

class CollectionItemsTableViewCell: UITableViewCell { 

@IBOutlet weak var collectionView: UICollectionView! 
var category1Json = [JSON?]() 

func fillCollectionView(with array: [JSON?]) { 
    self.category1Json = array 
    self.collectionView.reloadData() 
} 
override func awakeFromNib() { 
    super.awakeFromNib() 
    self.collectionView.delegate = self 
    self.collectionView.dataSource = self 
    loadCategoryDetails() 
    print("my array col is :",category1Json) 
    self.collectionView.reloadData() 

} 

extension CollectionItemsTableViewCell: UICollectionViewDelegate, UICollectionViewDataSource { 


func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    print("collection count is :", category1Json.count) 
    return category1Json.count 


} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! AbundanceAndLifePurposeCollectionViewCell 

    if category1Json.count>0{ 

    cell.titleLabel.text = category1Json[indexPath.row]?["title"].stringValue 
    cell.healerNameLabel.text = category1Json[indexPath.row]?["healerName"].stringValue 
    cell.teaserDescriptionLabel.text = category1Json[indexPath.row]?["teaserDescription"].stringValue 
    cell.priceLabel.text = category1Json[indexPath.row]?["price"].stringValue 

    cell.musicImageView.image = imageArray [indexPath.row] 

    } 

    return cell 

} 
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 


    let clickedIndex = songArray[indexPath.row] 

    print(clickedIndex) 


} 
+0

Warum machst du einen api-anruf, weil du seine daten nicht verwendest? –

+0

Entschuldigung, ich habe den Code – danutha

+0

bearbeitet Versuchen Sie einmal, die Anzahl der 'if conditions' von der 'cellForItemAt'-Methode zu entfernen, und legen Sie die Bezeichnung direkt fest, da die Zelle wiederverwendet wird. –

Antwort

0

Sie versuchen, diesen folgenden Code ein.

dispatch_async (dispatch_get_main_queue()) {
self.collectionView.reloadData()}

statt

self.collectionView.reloadData()

+0

soll ich das in CellforRow tun? – danutha

+0

Leider Ihren Befehl es –

+0

erklären nicht verstehen Sie bitte, wo genau ich diesen Code sir soll ich – danutha

Verwandte Themen