背景
我有UICollectionViewController
以两种模式之一显示项目,用户可以在这两种模式之间切换。每种模式使用不同的UICollectionViewCell
类。让我们称这些模式为" list view"和"网格视图"。
当我切换模式时,我在.reloadData
上调用UICollectionView
,它使用正确的单元格类重绘集合视图。这里的一切都很好。
现在:在一种类型的单元格的UICollectionViewCell
子类中,我想在包含它的集合视图切换模式时收到通知。在视觉上,屏幕上的一个细胞消失了;集合视图完全使用其他类型的单元格绘制。切换回来时,将重新显示该单元格。
问题:
如果UICollectionViewCell
"已删除" (即不再显示;我不确定是什么),我该如何收到通知从它的父集合视图发生在引擎盖下?
备注:
prepareForReuse
导致不再包含单元格时,不会在单元格上调用updateData
。willTransitionFromLayout:toLayout:
(空布局?)未被调用。didMoveToSuperview
没有任何帮助;它没有被召唤。.hidden
或.alpha
不起作用。dealloc
;它在重用队列中徘徊。细胞中的某些东西必须改变,我可以观察或挂钩,它是什么?
答案 0 :(得分:1)
更新:UICollectionViewDelegate
有这个方法,从文档中看起来就像我要问的那样:
原始答案:
当我即将切换并呼叫UICollectionViewController
时,通过此方法让reloadData
手动通知可见即将发生的死亡单元格,我的工作正常:
- (void)notifyCellsWillBeHidden {
for (UICollectionViewCell *cell in self.collectionView.visibleCells) {
if ([cell respondsToSelector:@selector(willBeRemovedFromCollectionView)]) {
[cell performSelector:@selector(willBeRemovedFromCollectionView)];
}
}
}
如果他们实施上述方法,这些单元可以做他们需要做的事情。
调用prepareForReuse
可能不是一个好主意,因为如果这是一个问题,它将在重新显示单元格之前再次调用。
我仍然很好奇是否有一种方法可以让小区接收通知,如果没有明确的呼叫,它将会变得不可见。