【问题标题】:UICollectionView update a single cellUICollectionView 更新单个单元格
【发布时间】:2013-12-16 07:25:46
【问题描述】:

我正在尝试更新UICollectionView 中的单个单元格,具体来说,我只是尝试更新由cell.imageView 引爆的特定单元格中的图像。 [self.collectionView reloadData] 不是一个真正的选择,因为它使整个集合视图闪烁。 [self.collectionView beginUpdates] 似乎不是 UICollectionView 中的东西。

我知道我可以使用:

[self.collectionView performBatchUpdates:^{
    //do something
} completion:nil];

我不确定在完成块中放入什么来更新某个单元格的imageView。这一切都在didSelectItemAtIndexPath 内部完成。另外我没有使用NSFetchedResultsController。有什么想法吗?

【问题讨论】:

  • 你的collectionViewLayout中的invalidateLayout方法怎么样?
  • @DineshRaja invalidateLayout 不会重新加载单元格的内容,因为没有调用“cellForItemAt indexPath”。

标签: ios objective-c uitableview uicollectionview uicollectionviewcell


【解决方案1】:

- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths

这是一种在您的collectionView 中重新加载特定indexPaths 的方法

【讨论】:

  • 谢谢!最终工作了。现在假设我有一个包含 50 个单元格的 collectionView,而我只是在另外 50 个单元格的数据中,我如何添加这 50 个额外的单元格并在其中显示数据而不执行 reloadData?执行 reloadData 会导致 collectionView 中所有图像不必要地闪烁,我想避免这种情况
  • 如果您的数组发生任何变化,您必须调用 reloadData。因为集合视图不知道,如果你没有调用 reloadData 方法。可能是 collectionViewLayout 工作中的 invalidateLayout 方法。但你别无选择。
  • 正确实现可能有点棘手,但您始终可以在更新数据源后使用-[UICollectionView insertItemsAtIndexPaths:] 在集合视图中插入单元格。
【解决方案2】:

Dinesh 的回答很准确。但是为了避免在重新加载(又名“闪烁”)时出现不需要的动画:

BOOL animationsEnabled = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[myCollectionView reloadItemsAtIndexPaths:myIndexPaths];
[UIView setAnimationsEnabled:animationsEnabled];

【讨论】:

  • 我似乎无法将 UIVIew 分配给 BOOL。
  • @Unome 是类方法所以没有具体的看法。
【解决方案3】:

参见“iOS 集合视图编程指南”中的Inserting, Deleting, and Moving Sections and Items

要插入、删除或移动单个部分或项目,您必须按照以下步骤操作:


更新数据源对象中的数据。 调用集合视图的适当方法来插入或删除部分或项目。 在通知集合视图任何更改之前更新数据源至关重要。集合视图方法假定您的数据源包含当前正确的数据。如果没有,collection view 可能会从您的数据源接收到错误的项目集,或者请求不存在的项目并导致您的应用崩溃。


因此,在您的情况下,您必须先将图像添加到集合视图数据源,然后调用 insertItemsAtIndexPaths。然后,集合视图将要求数据源委托函数为插入的项目提供视图。

【讨论】:

    猜你喜欢
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2020-12-27
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多