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 不起作用)