IOS Objc如何在滚动后正确加载UICollectionViewCell

时间:2015-08-20 10:10:52

标签: ios objective-c xcode scroll uicollectionview

我在obj / Xcode中很新,我需要做一个UIcollectionView如何从url请求获取图像。 我尝试使用scrollViewDidScroll捕获滚动事件,然后使用参数页面+ 1或-1调用我的请求函数;取决于滚动。

但是每当我进行无限循环,而我的细胞图像停止加载时,我认为这是因为我的方式是错误的:

捕捉滚动动作:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
{
     [self reload];   
}

函数reload发送请求并设置imgs。 如何正确加载页面,而不是每次滚动1000次。 抱歉我的英文,谢谢

2 个答案:

答案 0 :(得分:0)

你不需要像这样调用重载。滚动时,会自动调用'cellForItemAtIndexPath'。如果是表格中以前使用过的单元格(在视图外),那么单元格将被重新用于填充的新位置 - 因此'dequeueReusableCellWithReuseIdentifier'(希望你使用它?!)。

所以你需要做的就是在该方法上拥有代码,这将自动“延迟加载”你想要的图像。下面是一个cellForItemOfIndexPath方法的副本,它实现了这一点 - 下载时会填充图像。

sudo python -c "import os; os.mknod('/tmp/test123')"

所以解释一下 - VideoSearchCell是我的自定义单元格类型。它相当简单,它上面只有一个名为'imageView'的UIImageView。我还有一个名为'ytSearchResults'的数组 - 它包含一个对象数组,一些包含图像,有些不包含。随着图像下载,结果也会填充到该阵列,因此我不会下载超过必要的内容。

代码检查该数组中是否有图像。如果没有,它会下载代码。

顺便说一句,我使用__weak引用属性,因为ARC并不想意外地保留单元格或搜索结果。没有足够的时间来解释这里所有的一切!希望代码有所帮助。

还有一件事 - setImageWithURLRequest是一个来自非常方便和极受欢迎的库AFNetworking(2.0)的方法。抓住这一点,因为你会一直使用它。

答案 1 :(得分:0)

我不建议在实际使用单元格之前加载图像,因为您永远不知道用户是否会看到该单元格。您可以在调用 - collectionView:cellForItemAtIndexPath:时开始加载图像,在开始下载请求之前,您必须检查是否正在下载此图像,否则您将多次加载它。