在 UICollectionView 上禁用单元格重用

Posted

技术标签:

【中文标题】在 UICollectionView 上禁用单元格重用【英文标题】:Disable cell reuse on UICollectionView 【发布时间】:2012-11-14 16:56:27 【问题描述】:

我在我的应用程序中使用 UICollectionView,在单个单元格上带有手势识别器,允许用户“滑动打开”单元格以显示下面的更多数据。

问题是,我经常在 CollectionView 中重新加载数据;因为应用程序每 3 秒左右接收一次更新。这会导致在滑动单元格的过程中,collectionview 单元格被重用的不良行为。

用户将开始滑动一个单元格,应用程序将收到更新、reloadData,而另一个单元格将开始接收手势并开​​始滑动。

我曾尝试在幻灯片发生时禁用应用程序的更新,但这会导致应用程序内部出现其他并发症,所以我想知道是否有办法禁用单元格重用,(我最多只有 20 个单元格,所以我认为性能不会大幅下降)。

谢谢!

【问题讨论】:

你只是在调用reloadData吗?如果您只是重新加载特定的单元格会发生什么,例如除了正在手术的那个以外的所有那些? 【参考方案1】:

如果有新数据可用,您为什么不使用needsReload 之类的标志并设置它。幻灯片后,您检查该标志并重新加载collectionView,如果需要?这不工作吗?

如果您不想重复使用单元格,只需使用默认的 scrollView 并将所有视图放入其中!?

【讨论】:

【参考方案2】:

禁用重用很简单。只是不要使用 dequeueReusableCell 方法。 相反,只需分配,初始化您的单元格。我会小心这样做的性能和内存影响......

【讨论】:

我试过了,我用我需要的许多单元格填充了一个数组,并在 cellForRowAtIndexPath 中输入:MyCustomCell *cell=[self.arrayOfCells objectAtIndex:indexPath.row]; 但应用程序崩溃并出现以下错误。 *** Assertion failure in -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:] *** Assertion failure in -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:], /SourceCache/UIKit_Sim/UIKit-2372/UICollectionView.m:1138 @dKrawczyk:您如何创建集合视图单元格?使用 nib 文件还是纯粹在代码中? - 也许这个链接:***.com/questions/13281631/… 和我的解决方法***.com/questions/12729612/… 有帮助。 你为什么不做类似的事情:MyCustomCell *cell = [[MyCustomCell alloc] init]; ???在集合视图中没有任何单元格之前,您正在尝试访问集合视图中的单元格。 cellForRowAtIndexPath 方法的整个想法是它填充视图。 如果答案能解决您的问题,请务必将其标记为正确。

以上是关于在 UICollectionView 上禁用单元格重用的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 单元格用户交互已禁用

如何在 UICollectionview 中禁用单元格销售

Xcode UICollectionView 如何通过 indexpath 禁用某些单元格

在 UICollectionView 单元格中停止动画

UICollectionview 在滚动时更改选择/禁用选择 - iOS

滚动到 UICollectionView 中的下一个单元格