iOS 关于tableview或collectionView在reloadData的时候失效,不执行cellRorRow方法的解决思路

前言

今天在项目中做一个编辑collectionView的功能。我使用了一个第三方的layout来实现的(RACollectionViewReorderableTripletLayout,非常好用,在此顺便推荐一下)。在将collectionView的item进行移动的时候,会有一个假的cell浮在collectionView上面随着手势移动,直到手势结束。而假的cell在每次移动到一个其它cell的位置的时候,都会有一个代理方法的回调。起初,我在该方法中,修改了数据源以配合cell的移动,然后执行了reloadData方法。但是这里执行的reloadData方法并没有走cellForItem的方法,而numOfItem的方法是执行了的并且不为0。

问题

collectionView再走了reloadData代码后,并没有执行cellForItem代理方法。(对于tableView也会可能会有同样的问题)

可能的原因

1、当执行reloadData的时候collectionView正在被假的cell所遮挡。或者换句话说,collectionView并没有直接显示在window上(我不清楚这种说法是不是正确,但希望你能明白我想表达的意思),而这种情况下是不会执行cellForItem方法的。因此我重新在cell的拖拽手势结束并且假的cell消失后再执行reloadData,这是cellForItem才会被正确执行。

2、除了上述遮挡,根据网上的说法,在执行reloadData的时候如果它的size是0的话也会导致cellForItem不执行。所以如果遇到这种问题,在排除numOfRows代理方法返回不是0之后,可以考虑一下上面描述的这种情况。

总结

reloadData后如果不执行cellForRow代理方法,可以通过以下步骤找到原因。

  • 确定numOfRows是否为0
  • 确定cell的size是否为0
  • 确定tableView/collectionView上是否有遮挡

你可能感兴趣的:(iOS 关于tableview或collectionView在reloadData的时候失效,不执行cellRorRow方法的解决思路)