UICollectionViewCell如何访问其父级UICollectionViewController

4
我在使用一个UICollectionViewController时遇到了问题,它注册了一个自定义的UICollectionViewCell作为header。请查看附图。在中间的图表中,是一个UICollectionViewController,红色正方形突出显示了一个UIImageView,该UIImageView位于一个被注册为header的UICollectionViewCell内部。我试图实现右边的图表所示的结果,即当点击header单元格的UIImageView时,从底部滑出一个包含信息列表的UIView。到目前为止,我的代码结构如下: 1) 包含信息列表的UIView swift文件。2) 实例化UIView并将其添加到我的UICollectionViewController的子视图中。由于UIImageView(信息圆圈图标)存在于UICollectionViewCell中,因此我已将其设置为userInteractionEnabled,并向其中添加了TapGestureRecognizer。但是,由于我想要从UICollectionViewController中动画显示UIView,因此我不知道如何从我的UICollectionViewCell header文件中访问UICollectionViewController中的UIView属性。
我知道听起来很混乱,但如果有人能指点我方向,或者可能建议重新构建我的代码,我将不胜感激。如果您需要更多信息,请让我知道。非常感谢您的帮助。 编辑更新:非常感谢John的详细解释。乍一看,我以为协议只会应用于整个 UICollectionViewCell,但忽略了手势识别器中的delegate?.clicked()限制范围。John,非常感谢您的帮助。希望这可以帮助其他遇到类似问题的人。
1个回答

7
为了实现这一点,您应该在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)
     }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接