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)
}
Warum machst du einen api-anruf, weil du seine daten nicht verwendest? –
Entschuldigung, ich habe den Code – danutha
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. –