我遇到了一个UICollectionViewController问题,它将自定义UICollectionViewCell注册为标头.请参阅附图.
故事板截图
在中间的图中,是一个UICollectionViewController,红色方块突出显示UICmageView,它位于UICollectionViewCell内,注册为标题.我试图获得正确的图表的结果,这样当按下标题单元格的UIImageView时,带有信息列表的UIView从底部向上滑动.
这是我的代码到目前为止的结构:
1)包含信息列表的UIView swift文件.
2)实例化UIView并将其添加到我的UICollectionViewController中的子视图中.
由于UIImageView(信息圈图标)存在于UICollectionViewCell中,我将其设为userInteractionEnabled,并为其添加了TapGestureRecognizer.但是,因为我想从UICollectionViewController动画UIView,我不知道如何从我的UICollectionViewCell头文件访问UICollectionViewController中的UIView属性.
我知道这听起来真的很混乱,但如果有人能指出我正确的方向,或者可能建议重新构建我的代码,我会非常感激.如果您想了解更多信息,请与我们联系.非常感谢你的帮助.
编辑更新:非常感谢John的详细解释.乍一看,我认为该协议只适用于整个 UICollectionViewCell,但忽略了它是delegate?.clicked()
在 Gesture Recognizer中限制范围的事实.非常感谢John的帮助.希望这可以帮助其他类似的问题.
为了实现这一目标,你应该在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) } }