【问题标题】:UICollectionView Datasource MethodsUICollectionView 数据源方法
【发布时间】:2015-11-11 12:13:30
【问题描述】:

UICollectionView 有一些内置的数据源方法,例如“cellforItemAtIndexPath”方法和“numberofitemsinsection”方法。如果我理解正确,这些方法会在 viewDidLoad() 完成后调用。但是,出于我的目的,我希望能够准确控制调用这些方法的时间点。我该怎么做?

原因是我正在加载加载一些图像,我想在调用这些方法之前完成加载任务。

【问题讨论】:

  • 如果你想手动触发这个方法,只需重新加载集合视图 [self.collectionView reloadData];或者您需要在遇到这些委托时在您的应用程序中做一些事情,然后您最好尝试一个自定义 collectionview 和一个 delgate 来完成所需的操作
  • 你不能。您可以触发一系列特定的呼叫,但在那之后您将无法控制。最接近的方法是确保在要触发加载之前未设置数据源属性。
  • 好的,关键是我正在下载图像,需要它们在调用这些数据源方法之前完成下载。由于我的图片下载是异步进行的,因此我目前无法控制我的所有下载都先进行。
  • 最好在collectionview显示后异步加载图片。或者,如果图像绝对重要,您可以展示一个微调器。加载图像后,重新加载 collectionView 并隐藏微调器。回答你的问题:我不认为你想要什么是可能的。
  • 我在 viewDidLoad 中有微调器,但是在转换到视图之前,我从数据源方法中收到了编译器错误。由于这些数据源方法依赖于下载的成功执行,这是可以理解的。理论上我可以使用信号量,但我真的不想走这条路。

标签: ios objective-c xcode uicollectionview


【解决方案1】:

在图片下载完成之前,您似乎不想展示收藏集,对吗?在图像完成下载工作之前,是否为项目数返回 0?我没有带我的 Mac,或者我会在发布之前测试一下。

【讨论】:

  • 这更像是一个评论而不是一个答案
  • "你必须有 50 声望才能发表评论"
【解决方案2】:

从情节提要断开连接到控制器的 collectionView 数据源和委托。然后在需要时将它们设置在代码中。

首先将 collectionView 插座连接到接口部分。

@interface YourViewController : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate>

@property (weak, nonatomic) IBOutlet UICollectionView *collectionView;

所以一旦你的图片被加载,调用这个方法:-

self.collectionView.delegate= self;
self.collectionView.dataSource= self;
[self.collectionView reloadData];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多