UICollectionViewCell获得对它的父UICollectionViewController

时间:2017-01-19 13:21:59

标签: ios swift uicollectionview uicollectionviewcell

我遇到了一个UICollectionViewController问题,它将自定义UICollectionViewCell注册为标头。请参阅附图。

Storyboard Screenshot

在中图中,是一个UICollectionViewController,红色正方形突出显示UICmageView,它位于UICollectionViewCell内,注册为标题。我正在尝试获得正确图表的结果,这样当按下标题单元格的UIImageView时,带有信息列表的UIView将从底部向上滑动。

到目前为止,这是我的代码的结构:

1)包含信息列表的UIView swift文件。

2)实例化UIView并将其添加到我的UICollectionViewController中的子视图中。

由于UICmageView(信息圈图标)存在于UICollectionViewCell中,我已将其设为userInteractionEnabled,并为其添加了TapGestureRecognizer。但是,因为我想从UICollectionViewController动画UIView,我不知道如何从我的UICollectionViewCell头文件访问UICollectionViewController中的UIView属性。

我知道这听起来真的很混乱,但如果有人能指出我正确的方向,或者可能建议重新构建我的代码,我会非常感激。如果您想了解更多信息,请与我们联系。非常感谢你的帮助。

编辑更新:非常感谢John的详细解释。乍一看,我认为该协议只适用于整个 UICollectionViewCell,但忽略了它是中的delegate?.clicked() 这一事实。限制范围的手势识别器。非常感谢John的帮助。希望这可以帮助其他人解决类似的问题。

1 个答案:

答案 0 :(得分:5)

要想到达那里,你应该在UICollectionViewCell上实现一个协议,在那里你将告诉父节点单元格被点击以及它应采取的行动如下:

protocol MyCellDelegate: class {
    func clicked()
    func other()
}

class MyCell: UIColletionViewCell  {
    weak var delegate : MyCellDelegate?

    //call delegate?.clicked() where you have the gesture recogniser 

}

然后在cellForItemAtIndexPath中或使用MyCell的任何地方编写以下内容

 cell.delegate = self

然后为您的班级实施扩展程序:

 extension MyCollectionView: MyCellDelegate {
     func clicked() {
     //present the view here (the slide up)
     }
  }