Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 接收UICollectionViewCell上的通知';从其父集合或表视图中删除(或UITableViewCell';s)_Objective C_Uitableview_Uikit_Uicollectionview_Uicollectionviewcell - Fatal编程技术网

Objective c 接收UICollectionViewCell上的通知';从其父集合或表视图中删除(或UITableViewCell';s)

Objective c 接收UICollectionViewCell上的通知';从其父集合或表视图中删除(或UITableViewCell';s),objective-c,uitableview,uikit,uicollectionview,uicollectionviewcell,Objective C,Uitableview,Uikit,Uicollectionview,Uicollectionviewcell,背景: 我有一个UICollectionViewController,它以两种模式之一显示项目,用户可以在这两种模式之间切换。每种模式都使用不同类别的UICollectionViewCell。让我们将这些模式称为“列表视图”和“网格视图” 切换模式时,我在UICollectionView上调用.reloadData,它使用正确的单元格类重新绘制集合视图。这里一切都很好 现在:在一种单元格类型的UICollectionViewCell子类中,我希望在包含它的集合视图切换模式时收到通知。从视觉上看,

背景:

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

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

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

问题:

UICollectionViewCell
从其父集合视图中“删除”(即不再显示;我还不确定引擎盖下发生了什么)时,如何通知我

注意事项:

  • 当集合视图的
    updateData
    导致单元格不再包含时,不会对单元格调用
    prepareforeuse
  • 将不会调用从布局:到布局:
    (空布局?)的转换
  • 重写
    didmovetoserview
    没有帮助;它不叫
  • 在单元格上观察
    .hidden
    .alpha
    不起作用
  • 未调用单元格的
    dealloc
    ;它停留在重用队列中

单元格中的某些内容必须在更改,我可以观察到或连接到它,它是什么?

更新:
UICollectionViewDelegate
有此方法,从文档中看,它似乎满足了我的要求:

  • collectionView:DiEndDisplayingCell:forItemAtIndexPath:

原始答复:

当我准备切换并调用
reloadData
时,我让
UICollectionViewController
使用此方法手动通知可见单元格即将到来的厄运:

- (void)notifyCellsWillBeHidden {
    for (UICollectionViewCell *cell in self.collectionView.visibleCells) {
        if ([cell respondsToSelector:@selector(willBeRemovedFromCollectionView)]) {
            [cell performSelector:@selector(willBeRemovedFromCollectionView)];
        }        
    }
}
如果实现上述方法,这些单元就可以完成它们需要做的事情

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

我仍然很好奇,是否有一种方法可以让一个手机接收到一个通知,即如果没有一个明确的呼叫,它将变得不可见