嵌套的 UICollectionView 为每个部分返回相同的值 - Swift

Posted

技术标签:

【中文标题】嵌套的 UICollectionView 为每个部分返回相同的值 - Swift【英文标题】:Nested UICollectionView returning the same values for each section - Swift 【发布时间】:2020-04-13 00:34:31 【问题描述】:

我有一个 UICollectionView 嵌套在 UITableViewCell 中。每个 tableviewcell section 内部的 collectionview 应该根据 section 返回不同的数据。这是我的代码:

ViewController.swift

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate 

  var categoryKeys: [String]?

  let network = MediaNetworking()

  @IBOutlet weak var tableView: UITableView!

  override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view.

// fetch data
    network.fetchMedia()

    tableView.delegate = self
    tableView.dataSource = self

    print("hello world")
  


  func numberOfSections(in tableView: UITableView) -> Int 

    self.categoryKeys = network.categoryKeys

    return self.categoryKeys!.count
  


  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return 1
  



  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! SectionTableViewCell

    cell.theArray = network.sharedArray
    cell.accessArray = network.accessArray

    cell.backgroundColor = .purple


    return cell
  


  func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? 

    self.categoryKeys = network.categoryKeys

    return self.categoryKeys?[section]

  


  func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    return 300
  


SectionTableViewCell.swift

class SectionTableViewCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout 

  var categoryKeys: [String]?
  var theArray: [String: [Entity]]?
  var accessArray: [Entity]?

  @IBOutlet weak var collectionView: UICollectionView!

  override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code

    collectionView.delegate = self
    collectionView.dataSource = self

  

  override func setSelected(_ selected: Bool, animated: Bool) 
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
  


  func numberOfSections(in collectionView: UICollectionView) -> Int 

    return 1
  

  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 

    return accessArray!.count
  

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

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

    cell.artistLabel.text = accessArray![indexPath.row].name

    return cell

  


  func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView 
    if kind == UICollectionView.elementKindSectionHeader 
      let sectionHeader = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "SectionHeaderView", for: indexPath) as! SectionHeaderView

      if indexPath.section < categoryKeys!.count 

        let category = categoryKeys![indexPath.section]
        sectionHeader.categoryLabel.text = category
      
      return sectionHeader
    

    return UICollectionReusableView()
  


  func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 

    return CGSize(width: 400, height: 300)
  



现在所有的 collectionview 单元格都返回相同的值。关于我可能遗漏的任何想法?..

【问题讨论】:

【参考方案1】:

您是否尝试在更改数据数组后调用 collectionView.reloadData()?

cell.theArray = network.sharedArray
cell.accessArray = network.accessArray
cell. collectionView.reloadData()

【讨论】:

是的!这有效!谢谢,我完全忘了重新加载collectionview。 :) 如果这个答案对你有用,你可以点击左边的绿色箭头接受它

以上是关于嵌套的 UICollectionView 为每个部分返回相同的值 - Swift的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发中解决UITableView嵌套ScrollView(UICollectionView)的手势冲突

UITableViewCell中嵌套UICollectionView

UICollectionView 初始化后不滚动

嵌套垂直 UICollectionView 和动态高度

停止在 UITableView 的嵌套 UICollectionView 中播放视频或仅在嵌套结构中的可见单元格上播放

无法滚动到底部 UICollectionview