从其父集合或表视图接收UICollectionViewCell(或UITableViewCell)删除的通知

时间:2012-10-30 10:55:31

标签: objective-c uitableview uikit uicollectionview uicollectionviewcell

背景

我有UICollectionViewController以两种模式之一显示项目,用户可以在这两种模式之间切换。每种模式使用不同的UICollectionViewCell类。让我们称这些模式为" list view"和"网格视图"。

当我切换模式时,我在.reloadData上调用UICollectionView,它使用正确的单元格类重绘集合视图。这里的一切都很好。

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

问题:

如果UICollectionViewCell "已删除" (即不再显示;我不确定是什么),我该如何收到通知从它的父集合视图发生在引擎盖下?

备注:

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

细胞中的某些东西必须改变,我可以观察或挂钩,它是什么?

1 个答案:

答案 0 :(得分:1)

更新:UICollectionViewDelegate有这个方法,从文档中看起来就像我要问的那样:

  • 的CollectionView:didEndDisplayingCell:forItemAtIndexPath:

原始答案:

当我即将切换并呼叫UICollectionViewController时,通过此方法让reloadData手动通知可见即将发生的死亡单元格,我的工作正常:

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

如果他们实施上述方法,这些单元可以做他们需要做的事情。

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

我仍然很好奇是否有一种方法可以让小区接收通知,如果没有明确的呼叫,它将会变得不可见。