Vous pouvez toujours remonter la hiérarchie des vues :
var parentCollectionView = self.superview
while parentCollectionView is UICollectionView != true {
parentCollectionView = parentCollectionView?.superview
}
Vous pouvez remplacer UICollectionView ci-dessus par la sous-classe que vous recherchez si vous avez besoin de passer par plusieurs vues de collection. Le moyen le plus simple est de donner à votre cellule une référence faible à votre collectionView dans cellForItemAtIndexPath ; cela fonctionne également pour votre contrôleur de vue au lieu de votre collectionView qui est probablement ce que vous voulez vraiment la référence à. La référence doit être faible puisque le collectionView conserve la cellule, sinon vous créez un cycle.
class CustomCollectionViewCell: UICollectionViewCell {
weak var customCollectionViewController: CustomCollectionViewController?
}
class CustomCollectionViewController: UICollectionViewController {
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: String(describing: CustomCollectionViewCell.self), for: indexPath) as! CustomCollectionViewCell
cell.customCollectionViewController = self
return cell
}
}