UICollectionView如何从委托中重新加载数据

Posted

技术标签:

【中文标题】UICollectionView如何从委托中重新加载数据【英文标题】:UICollectionView how to reloadData from delegate 【发布时间】:2016-06-21 10:38:23 【问题描述】:

我正在尝试从我的委托方法“applicationDidEnterForeground”重新加载我的 collectionView,但出现错误“”UICollectionView 必须使用非零布局参数初始化”

在我的CollectionViewController我有这个方法

-(void)reloadThisData

    [self.collectionView reloadData];

这是我在 appDelegate

中的代码
- (void)applicationWillEnterForeground:(UIApplication *)application 
    CollectionViewController *collectionViews = [[CollectionViewController alloc]init];

    [collectionViews reloadThisData];

我知道它只会创建另一个collectionView,这就是为什么它只会返回一个空值。有没有其他方法可以将我的 uiviewcollection 从后台重新加载到前台?

【问题讨论】:

你能提供代码吗? 感谢您的回复,请再看我的问题。 【参考方案1】:

要修复您遇到的错误,您需要使用流布局初始化 CollectionViewController。

UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc] init];
CollectionViewController * collectionViews = [[CollectionViewController alloc] initWithCollectionViewLayout:flowLayout];
[collectionViews reloadThisData];

我会推荐一种不同的方法来执行此操作,因为在您的应用委托中,您将创建一个新的 CollectionViewController 实例,而不是针对显示的实例。 您应该在 CollectionViewController 的 viewWillAppear 方法中订阅“UIApplicationDidBecomeActiveNotification”通知。

-(void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadThisData) name:UIApplicationDidBecomeActiveNotification object:nil];

不要忘记删除观察者,以免重复调用 reload 方法。

-(void)viewDidDisappear:(BOOL)animated

    [super viewDidDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];

【讨论】:

以上是关于UICollectionView如何从委托中重新加载数据的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 8 中重新加载时未调用 UICollectionview cellForItemAtIndexPath

重新加载子视图(UICollectionview)

在 UICollectionView 中使用 reloadData 时如何从重新加载中排除标头

UICollectionView 委托方法没有被正确调用

UICollectionView:如何在委托方法中设置特定项目后获取项目大小

如何使用 UICollectionView 在 Pages 中重新创建重命名动画?