如何自动重新加载集合视图?
Posted
技术标签:
【中文标题】如何自动重新加载集合视图?【英文标题】:How do I reload a Collection View automatically? 【发布时间】:2013-09-23 23:51:33 【问题描述】:我开发了一个使用集合视图的 RSS 阅读器应用程序。我的问题是,在第一次启动时,应用程序出现空白。
该过程是,RSS 提要从网络中提取,存储到设备上的临时文件中,然后通过集合视图显示。
我的问题是如何让应用程序在文件加载后自动重新加载数据?这样用户就不会看到初始的空白屏幕。
我已尝试添加此代码
[self.collection1 performBatchUpdates:^
[self.collection1 reloadSections:[NSIndexSet indexSetWithIndex:0]];
completion:nil];
但它不适用于初始视图。
我应该从 appdelegate 做点什么吗?还是来自集合视图控制器本身?
请指教
以下是用于获取和显示我的数据的代码......
#pragma mark - UICollectionViewDataSourceDelegate
- (NSInteger) numberOfSectionsInCollectionView:(UICollectionView *)collectionView
return 1;
- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
return [_articleListmain count];
- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
MainCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"articleCellmain"
forIndexPath:indexPath];
NSDictionary *item = [_articleListmain objectAtIndex:indexPath.item];
// set the article image
[cell.image setImageWithURL:[item objectForKey:@"image"]];
// set the text of title UILabel
cell.title.text = [NSString stringWithFormat:@"%@\n\n\n\n", [item objectForKey:@"title"]];
cell.title.textColor = [UIColor colorWithRed:33.0f/255.0f green:74.0f/255.0f blue:146.0f/255.0f alpha:1.0f];
// set the text of summary UILabel
cell.description.text = [NSString stringWithFormat:@"%@\n\n\n\n\n\n\n\n\n", [item objectForKey:@"description"]];
cell.targetURL.text = [NSString stringWithFormat:@"%@\n\n\n\n", [item objectForKey:@"link"]];
cell.category.text = [NSString stringWithFormat:@"%@\n\n\n\n", [item objectForKey:@"category"]];
cell.date.text = [NSString stringWithFormat:@"%@\n\n\n\n", [item objectForKey:@"pubDate"]];
cell.image.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"placement.png"]];
return cell;
【问题讨论】:
【参考方案1】:知道下载完成后,您应该可以使用 [collectionView reloadData]。
【讨论】:
我是在集合视图控制器中使用它还是在我完成数据解析后使用它。这就是我遇到的问题。 在我的收藏视图中尝试过,日志显示它重新加载但不显示更改空白显示 没有看到代码,除了重新加载时数据不存在之外,我真的不知道会导致这种情况。在您的 cellForItemAtIndexPath 中,您是否检查过您的数据源(无论它可能是什么)以查看您的数据是否存在?也许您想修改您的帖子以包含该方法的代码。 代码已更新。此数据取自网络。使用 NSDictionary 解析、存储到本地文件然后显示。使用 CollectionView【参考方案2】:试试这个
[self.collection1 performBatchUpdates:^
[collectionView reloadData]
completion:nil];
下载完成后。
【讨论】:
【参考方案3】:[self.collection1 performBatchUpdates:^
[self.collection1 reloadSections:[NSIndexSet indexSetWithIndex:0]];
completion:nil];
尝试用下面的代码替换这段代码
[self.collection1 performBatchUpdates:^
[self.collection1 reloadData];
completion:nil];
【讨论】:
【参考方案4】:我认为您只是将 [self.collection1 reloadData] 放在放置集合视图的 ViewController 的 viewWillAppear 中。
或
您甚至可以在视图出现之前在某处重新加载数据,例如在解析之后立即确保您在重新加载之前已初始化集合视图所在的视图。
【讨论】:
以上是关于如何自动重新加载集合视图?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIViewRepresentable SwiftUI 中重新加载集合视图
如何在 CollectionView iOS 中停止自动重新加载和刷新图像