如何从父UICollectionViewCell检索子UICollectionView中的数据-Swift 4

时间:2019-01-28 20:16:02

标签: ios swift uicollectionview uicollectionviewcell

假设我有一个Cheddar,它的数据叫做ParentCollectionViewController

此数据也可以在assetID中使用。

如何在每个ParentCollectionViewControllerCell中的ChildCollectionView中传递此数据。

Here's the image

谢谢!

3 个答案:

答案 0 :(得分:1)

首先,如果要首先发送数据,则需要在ParentCollectionViewControllerCell中注册子collectionviewcell。您将在awakeFromNib()中完成此操作。

override func awakeFromNib() {
   childCollectionView.register(UINib.init(nibName: "childCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "childCollectionViewCell")
   childCollectionView.reloadData()
}

因此,这意味着您在ParentCollectionViewControllerCell中具有子collectionview的所有委托和数据源。因此,您将通过cellForItemAtindexPath发送数据:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "childCollectionViewCell", for: indexPath) as! childCollectionViewCell
        cell.bindAssetid(strAssetId: assetID!)
        return cell
    }

我认为这个答案解决了您的要求。

快乐编码

答案 1 :(得分:0)

首先,您需要检测所选的UICollectionView,然后必须从该单元格中获取数据,并对其进行任何处理,您只需在didSelectRowAt函数中进行检查,然后执行举例来说,无论您使用什么数据进行操作,您都想从子单元格中获取名为foo的内容并将其显示在Parent单元格中,那么您的代码应该是这样的

 var myFooData: String?
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if collectionView == parentCollectionView { // if the selected cell from the parent collection view do something

        } else {
            //if the selected cell from the sub collection view do something
        myFooData = (collectionView.cellForItem(at: indexPath) as! MyCusomCell).MyFooData
        }
    }

答案 2 :(得分:0)

我找到了一个更简单的选择。

  1. 在ChildCollectionView文件中声明一个函数setData()。

    func setData(dataString: String){
       print(dataString, "data you wanted to pass")
    }
    
  2. 将ChildCollectionView的情节提要从情节提要插入ParentCollectionViewCell

  3. 使用出口在ParentCollectionViewCell中调用setData(data)函数,并将数据传递到其中。像这样:

    var dataString: String! {
      didSet {
        childCollectionViewOutlet.setData(dataString: dataString)
      }
    }
    
  4. 瞧!现在,您可以在所需的ChildCollectionView中获得数据。希望这对某人有帮助