UICollectionView无法正确重新加载

时间:2017-03-15 08:18:17

标签: ios uitableview swift3 uicollectionview uicollectionviewcell

我正在使用swift 3中的一个项目,它在UICollectionView内包含一个UITableView。因此,虽然我设法将所有属性分配给我从服务器获取的UICollectionViewCell类,但是一旦我运行项目,除非我滚动UITableView,否则数据不会出现在单元格上。三个类的结构如下。非常感谢帮助。

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类

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)                
}

1 个答案:

答案 0 :(得分:1)

您尝试以下代码。

  

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

而不是

  

self.collectionView.reloadData()