【问题标题】:How to reload only data section of UICollectionView?如何仅重新加载 UICollectionView 的数据部分?
【发布时间】:2013-01-10 12:11:32
【问题描述】:

我正在尝试仅重新加载 UICollectionView 的数据部分,而不是页眉或页脚(补充视图)。

当我使用reloadData 方法时,页眉和页脚部分也会重新加载,这就是我想要的。

找到了reloadSections:的方法,不知道为什么不行。

因为我的收藏视图只包含一个部分,所以我尝试使用这样的方法:

[collectionViewController.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];

但是调用方法时会产生运行时错误。错误内容为:

'NSInvalidArgumentException', reason: '-[UICollectionViewUpdateItem action]:
unrecognized selector sent to instance 0x90aec00'

reloadSections:这个方法是不允许这样用的吗?有没有其他方法可以只重新加载数据部分,而不是页眉或页脚部分?

【问题讨论】:

  • 不,这是有效的。查看 Apple 的文档:developer.apple.com/library/ios/#documentation/uikit/reference/…collectionViewController 在哪里?是在主视图吗?您必须改用“self.collectionView”吗?
  • 我做了一个根视图控制器,并将名称为collectionViewController的UICollectionViewController对象设置为根视图控制器的属性。
  • 我检查了表格视图的 reloadSections:withRowAnimation: 方法工作正常。在使用集合视图的 reloadSections 方法之前是否有实现方法或配置环境?
  • 我认为这个问题与this SO article有关,因为当键盘关闭时我找不到同样的问题。但是使用该修复对我不起作用...(但收到不同的错误消息...“***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'*** setObjectForKey:对象不能为零(键:<_uicollectionviewitemkey:> 类型 = SV Kind = UICollectionElementKindSectionHeader IndexPath = 2 个索引 [0, 0])'")

标签: ios objective-c ios6 uicollectionview


【解决方案1】:

我认为该错误仅在搜索栏是集合视图的子视图时发生,并且在键盘输入启动时尝试调用reloadSections:

This article 给出了类似问题的答案,但这对我不起作用。

所以我使用了另一种方法,可以调用几乎相同的功能。

我没有将标题添加为补充视图,而是将标题设置为“视图”的子视图。 (不是collectionView)

并添加了一些滚动代理来模仿表格视图的标题。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat y = scrollView.contentOffset.y;
    if (y < 44) {
        [self.searchBar setFrame:CGRectMake(0, -y, 320, 44)];
        [self.searchBar setHidden:NO];
    } else if (y >= 44) {
        [self.searchBar setHidden:YES];
    }  
} 

【讨论】:

  • +100 很棒的东西,很好用。使用集合视图标题可能有更好的解决方案,但无论如何都要感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多