2014-09-10 199 views
3

嗨我有一个阵列与100张图片url从flickr采取。当我使用UICollectionView我显示100个细胞中,只有8个细胞是在屏幕上,当我向下滚动才能看到未来8他们像以前一样,当我执行Swift - UICollectionView重复(重复)单元格

func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! 

和println(“东西”)它在控制台只写8次的东西,但阵列的含量为100

我用这个:

func collectionView(collectionView: UICollectionView?, numberOfItemsInSection section: Int) -> Int { 
    return self.photosUrls.count 
} 

它使100个细胞,但细胞总是重复...任何人谁知道如何击败斯威夫特在XCode GM种子的新版本中?

func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! { 
    let cell: ImageCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as ImageCell 
    let imgUrl = photosUrls[indexPath!.row] 
    let api_url = NSURL.URLWithString(imgUrl) 
    let URLReq = NSURLRequest(URL: api_url) 
    let NSOpQ:NSOperationQueue = NSOperationQueue() 
    NSURLConnection.sendAsynchronousRequest(URLReq, queue: NSOpQ, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in 
     if(error == nil){ 
      cell.theWPImage!.image = UIImage(data: data) 
     } 
     }) 
    return cell 
} 

回答

2

我想你不了解UITableViewUICollectionView委托方法是如何工作的。

iOS不会同时加载100个单元格,因为它会非常缓慢,而且用户体验不佳。因此,只有当单元格出现在屏幕上时才会调用方法cellForItemAtIndexPathcellForRowAtIndexPath

每当您向下滚动时,您都会看到再次调用方法cellForItemAtIndexPath以制作新的单元格。如果将代码println(indexPath.row)置于cellForItemAtIndexPath之内,则实际上会看到在向上或向下滚动时重复打印的单元格编号。

如果在向下滚动后看到相同的单元格,则可能是由于代码为cellForItemAtIndexPath。除非您粘贴上面的完整源代码,否则我无法为您提供帮助。或者它可能是XCode GM种子UICollectionView中的一个错误。

如何在XCode 6 Beta 7中尝试相同的项目并回报?我在XCode GM中也遇到了UICollectionView问题。 IT与约束有关。请参阅:iOS 8 GM does not update constraints on collection views我现在正在使用XCode 6 Beta 7。

+0

我添加了代码。看到它,谢谢:) – 2014-09-11 08:01:22

1

你的问题是你正试图加载cellForRow函数内的图像。在图片下载的时候,你的collectionView会显示另一个单元格。 正确的做法之一是将viewDidLoad中的图像加载到数组中,然后从cellForRow中的数组中加载该数组。