接收关于从其父集合或表视图中删除 UICollectionViewCell(或 UITableViewCell)的通知
Posted
技术标签:
【中文标题】接收关于从其父集合或表视图中删除 UICollectionViewCell(或 UITableViewCell)的通知【英文标题】:Receiving notification on a UICollectionViewCell's (or UITableViewCell's) removal from its parent collection or table view 【发布时间】:2012-10-30 10:55:30 【问题描述】:背景:
我有一个UICollectionViewController
,它以两种模式之一显示项目,用户可以在这两种模式之间切换。每种模式使用不同类别的UICollectionViewCell
。我们将这些模式称为“列表视图”和“网格视图”。
当我切换模式时,我在UICollectionView
上调用.reloadData
,它使用正确的单元格类重新绘制集合视图。这里一切正常。
现在:在一种类型的单元格的 UICollectionViewCell
子类中,我希望在包含它的集合视图切换模式时得到通知。视觉上,屏幕上的一个单元格消失了;集合视图完全使用其他类型的单元格绘制。切换回来时,单元格会重新显示。
问题:
当UICollectionViewCell
被父集合视图“删除”(即不再显示;我不确定幕后发生了什么)时,我如何收到通知?
注意事项:
当集合视图的updateData
导致不再包含该单元格时,不会在该单元格上调用prepareForReuse
。
willTransitionFromLayout:toLayout:
(空布局?)未被调用。
覆盖didMoveToSuperview
没有帮助;它没有被调用。
观察单元格上的.hidden
或.alpha
不起作用。
单元格的dealloc
未被调用;它停留在重用队列中。
牢房里一定有什么东西在发生变化,我可以观察到或陷入其中,那是什么?
【问题讨论】:
【参考方案1】:更新:UICollectionViewDelegate
有这个方法,从文档中看它似乎符合我的要求:
原答案:
当我要切换并调用reloadData
时,我通过让UICollectionViewController
手动通知可见 单元格即将到来的厄运,我得到了这项工作:
- (void)notifyCellsWillBeHidden
for (UICollectionViewCell *cell in self.collectionView.visibleCells)
if ([cell respondsToSelector:@selector(willBeRemovedFromCollectionView)])
[cell performSelector:@selector(willBeRemovedFromCollectionView)];
如果实现了上述方法,这些单元格就可以做他们需要做的事情了。
调用prepareForReuse
可能不是一个好主意,因为如果出现问题,会在重新显示单元格之前再次调用它。
我仍然很好奇是否有办法让单元格接收通知,即如果没有明确的调用,它将变得不可见。
【讨论】:
以上是关于接收关于从其父集合或表视图中删除 UICollectionViewCell(或 UITableViewCell)的通知的主要内容,如果未能解决你的问题,请参考以下文章