UICollectionView中的UITableView:无法设置值

时间:2019-12-11 21:30:34

标签: ios swift uitableview uicollectionview

我有一个带有4个UICollectionViewCells的UICollectionView。每个单元格都包含一个UITableView,其中包含不同数量的单元格。

我有一个数组,需要从其中将一个值(取决于indexPath)传递到单元格中。我的问题是,当我尝试这样做时,它总是给我零。

例如,我有这个数组:

let arrayOfStrings = ["test1", "test2", "test3", "test4"]

我在集合视图的cellForItemAt方法中有以下代码:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "testCollectionViewCell", for: indexPath) as! TestCollectionViewCell

    cell.myString = arrayOfStrings[indexPath.row]

    cell.label.text = "This text is set."
    return cell
}

单元格的标签设置正确,但是当我尝试在单元格表视图的cellForRowAt方法中打印myString时,它始终返回nil。 我需要该字符串,因为我计划根据传入的字符串来处理表视图。

那为什么会发生这种情况,怎么办呢?

1 个答案:

答案 0 :(得分:1)

您可以尝试这样

extension HomeViewController : UITableViewDelegate, UITableViewDataSource {
   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  return 4
   }

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

  if indexPath.row == 0 {
    let cell = tableView.dequeueReusableCell(withIdentifier: "DealTableViewCell", for: indexPath) as! DealTableViewCell
    cell.DealCollectionView.dataSource = self
    cell.DealCollectionView.delegate = self
    cell.DealCollectionView.tag = 10101
    return cell
} else if indexPath.row == 1 {
    let cell = tableView.dequeueReusableCell(withIdentifier: "BusinessTableViewCell", for: indexPath) as! BusinessTableViewCell
    cell.BusinessCollectionView.dataSource = self
    cell.BusinessCollectionView.delegate = self
    cell.BusinessCollectionView.tag = 10102
    return cell
} else if indexPath.row == 2 {
    let cell = tableView.dequeueReusableCell(withIdentifier: "FilterTableViewCell", for: indexPath) as! FilterTableViewCell
    cell.FilterCollectionView.dataSource = self
    cell.FilterCollectionView.delegate = self
    cell.FilterCollectionView.tag = 10103
    return cell
} else {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ComboTableViewCell", for: indexPath) as! ComboTableViewCell
    cell.ComboCollectionView.dataSource = self
    cell.ComboCollectionView.delegate = self
    cell.ComboCollectionView.tag = 10104
    return cell
   }
  }
}

将集合视图添加到每个表视图单元格,并在表视图单元格中设置委托

   extension HomeViewController : UICollectionViewDelegate, UICollectionViewDataSource {

  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  if collectionView.tag == 10101 {
    return 3
  } else if collectionView.tag == 10102 {
    return 3
  } else if collectionView.tag == 10103 {
    return 3
  } else if collectionView.tag == 10104 {
    return 3
 }
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if collectionView.tag == 10101 {
    let cell = collectionView.dequeueReusableCell(withIdentifier: "DealCollectionViewCell", for: indexPath) as! DealCollectionViewCell

    return cell
} else if collectionView.tag == 10102 {
    let cell = collectionView.dequeueReusableCell(withIdentifier: "BusinessCollectionViewCell", for: indexPath) as! BusinessCollectionViewCell

    return cell
} else if collectionView.tag == 10103 {
    let cell = collectionView.dequeueReusableCell(withIdentifier: "FilterCollectionViewCell", for: indexPath) as! FilterCollectionViewCell

    return cell
} else if collectionView.tag == 10104 {
    let cell = collectionView.dequeueReusableCell(withIdentifier: "ComboCollectionViewCell", for: indexPath) as! ComboCollectionViewCell

    return cell
}

return UICollectionViewCell()
}
}

要重新加载正在使用的collectionView

if let cell = self.tableView.cellForRow(at: IndexPath(row: i, section: 0)) as? 
tableViewCell {
  cell.collectionView.reloadData()
 }