我遇到了一个UICollectionViewController问题,它将自定义UICollectionViewCell注册为标头。请参阅附图。
在中图中,是一个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的帮助。希望这可以帮助其他人解决类似的问题。
答案 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)
}
}