UICollectionViewCell 获得对其父 UICollectionViewController 的访问权限

Posted

技术标签:

【中文标题】UICollectionViewCell 获得对其父 UICollectionViewController 的访问权限【英文标题】:UICollectionViewCell gaining access to it's parent UICollectionViewController 【发布时间】:2017-01-19 13:21:58 【问题描述】:

我在使用 UICollectionViewController 时遇到问题,它将自定义 UICollectionViewCell 注册为标题。请看附图。

Storyboard Screenshot

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

这是我目前的代码结构:

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

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

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

我知道这听起来很令人困惑,但如果有人能指出我正确的方向,或者可能建议重新构建我的代码,我将不胜感激。如果您想了解更多信息,也请告诉我。非常感谢您的帮助。

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

【问题讨论】:

【参考方案1】:

为了到达那里,你应该在 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)
     
  

【讨论】:

以上是关于UICollectionViewCell 获得对其父 UICollectionViewController 的访问权限的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionViewCell 上的不需要的 UIView(TapGesture 不起作用)

UICollectionViewCell 展开动画

UICollectionViewCell - 圆形下载图像

在 UICollectionViewCell 中滑动 UIView 会阻止滚动功能

如何获得一个 Cell 的数量?

在对其进行一些计算后,我如何下载数据框并获得新的结果?