Как я могу получить данные в моем дочернем UICollectionView из моего родительского UICollectionViewCell - swift 4 - PullRequest
0 голосов
/ 28 января 2019

Предположим, у меня есть ParentCollectionViewController, в котором есть данные assetID.

Эти данные также доступны в ParentCollectionViewControllerCell.

Как я могу передать эти данные в ChildCollectionView, который находится в каждом ParentCollectionViewControllerCell.

Вот изображение

Спасибо!

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Прежде всего вам нужно обнаружить выбранный 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
        }
    }
0 голосов
/ 29 января 2019

Я нашел более простую альтернативу.

  1. Объявите функцию setData () в файле ChildCollectionView.

    func setData(dataString: String){
       print(dataString, "data you wanted to pass")
    }
    
  2. Возьмите выход ChildCollectionView из раскадровки в ParentCollectionViewCell

  3. Вызовите функцию setData (data) в ParentCollectionViewCell, используярозетка и передать в нее данные.Вот так:

    var dataString: String! {
      didSet {
        childCollectionViewOutlet.setData(dataString: dataString)
      }
    }
    
  4. И вуаля!Теперь у вас будут данные в желаемом ChildCollectionView.Надеюсь, это кому-нибудь поможет

0 голосов
/ 28 января 2019

Прежде всего, если вы хотите сначала отправить данные, вам нужно зарегистрировать дочернюю коллекцию viewviewcell в ParentCollectionViewControllerCell.Это вы будете делать в awakeFromNib ().

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

Таким образом, это означает, что у вас есть все делегаты и источник данных дочерней коллекции в ParentCollectionViewControllerCell.Таким образом, вы отправите данные через 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
    }

Я думаю, что этот ответ исправил ваше требование.

Happy Coding

...