如何从一个孩子里面得到的UITableView的部分UICollectionview(How to

2019-09-28 06:50发布

我有一个UITableViewUICollectionView内的每个其行像以下说明的。

来源: https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/

我的应用程序的目的是显示一个字符集的每个表视图行中的语言。 每个字符被包含在相应的行内的的CollectionView的集合视图小区内。

我遇到的问题是英文字符集正在显示,每行的tableview。

这是因为每个的CollectionView仅具有一个部分,因而每一的CollectionView使用相同indexPath.section的零值。

我需要做的就是表视图细胞的collectionviews不到的区间值,并以某种方式传递到

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

我已经试过几件事情,但我不能找到一种方法,从内它的CollectionView访问的tableview区间值。

我的代码是一个有点乱,但一般重要的部分是

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath)

    return cell
}

...

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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "InnerCollectionViewCell",
                                                  for: indexPath as IndexPath)

    //format inner collectionview cells

    //indexPath.section is the collectionview section index but needs to be its parent tableview section's index. How do I get it? 
    cellCharLabel?.text = Languages.sharedInstance.alphabets[indexPath.section].set[indexPath.row].char
    cellCharLabel?.textAlignment = .center
    cellCharLabel?.font = UIFont(name: "Helvetica", size: 40)

    cell.contentView.addSubview(cellCharLabel!)

    return cell
}

Answer 1:

您可以设置collectionView标签做出来。 CollectionView应的子视图tableViewCell 。 这是collectionView可以是你的自定义属性TableViewCell看来你是使用Prototype Cell

class YourCustomizeTableViewCell: UITableViewCell {
   let collectionView: CollectionView
   ...
}



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

    let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath) as! YourCustomizeTableViewCell
   cell.collectionView.tag = indexPath.row

   return cell
}

...

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


//indexPath.section is the collectionview section index but needs to be its parent tableview section's index. How do I get it? 
cellCharLabel?.text = Languages.sharedInstance.alphabets[collectionView.tag].set[indexPath.row].char
 ...
return cell
}


Answer 2:

我假设你有一个UICollectionView实例的自定义的UITableViewCell类,所以你只需要当你打电话的cellForRowAtIndexPath通过它的部分指标。

你需要做一个VAR在tableViewCell类来保存节索引。

 class CustomTableViewCell: UITableViewCell {
      var sectionIndex:Int?

 }

然后调用cellForRow时......你刚刚通过的部分到该小区。

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath) as CustomTableViewCell
    cell.sectionIndex = indexPath.section
    return cell
}

不知道你是如何将数据加载到收集意见,你不显示,但一旦你的表视图细胞有部分你就可以做很多事情来加载数据。

让我知道如果你需要更多的细节



文章来源: How to get section of UITableView from inside a child UICollectionview