2

背景:

我有一个UICollectionViewController以两种模式之一显示项目,用户可以在这两种模式之间切换。每种模式使用不同类别的UICollectionViewCell. 我们将这些模式称为“列表视图”和“网格视图”。

当我切换模式时,我调用.reloadDataUICollectionView它使用正确的单元格类重绘集合视图。这里一切正常。

现在:在UICollectionViewCell一种类型的单元格的子类中,我希望在包含它的集合视图切换模式时得到通知。视觉上,屏幕上的一个单元格消失了;集合视图完全使用其他类型的单元格绘制。切换回来时,单元格会重新显示。

问题:

UICollectionViewCell当 a 从其父集合视图中“删除”(即不再显示;我不确定幕后发生了什么)时,如何通知我?

笔记:

  • prepareForReuse当集合视图updateData导致单元格不再被包含时,不会在单元格上调用。
  • willTransitionFromLayout:toLayout:(一个空的布局?)没有被调用。
  • 覆盖didMoveToSuperview没有帮助;它没有被调用。
  • 观察.hidden.alpha对细胞不起作用。
  • dealloc不调用单元格;它停留在重用队列中。

牢房中的某些东西一定在发生变化,我可以观察到或陷入其中,那是什么?

4

1 回答 1

1

更新:UICollectionViewDelegate有这种方法,从文档中看它似乎符合我的要求:

  • 集合视图:didEndDisplayingCell:forItemAtIndexPath:

原答案:

当我要切换和调用时,我通过使用这种方法UICollectionViewController手动通知即将到来的厄运的可见单元,我得到了这个工作reloadData

- (void)notifyCellsWillBeHidden {
    for (UICollectionViewCell *cell in self.collectionView.visibleCells) {
        if ([cell respondsToSelector:@selector(willBeRemovedFromCollectionView)]) {
            [cell performSelector:@selector(willBeRemovedFromCollectionView)];
        }        
    }
}

如果这些单元实现了上述方法,那么它们就可以做他们需要做的事情。

调用prepareForReuse可能不是一个好主意,因为如果这是一个问题,它将在重新显示单元格之前再次调用。

我仍然很好奇是否有办法让单元格接收通知,即如果没有明确的调用,它将变得不可见。

于 2012-10-30T11:15:32.053 回答