Swift - UICollectionView重复(重复)单元格

时间:2014-09-10 17:44:30

标签: swift duplicates uicollectionview cells

嗨我有一个数组,其中有100张图片网址来自flickr。当我使用UICollectionView时,我显示100个单元格,屏幕上只有8个单元格,当我向下滚动以查看下一个8时,它们与之前和执行时相同

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

和println(“something”)它在控制台中只写了8次但是数组的内容是100

我用这个:

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

它生产100个细胞,但细胞总是重复......任何知道如何在新版XCode GM种子中击败Swift的人?

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 个答案:

答案 0 :(得分:2)

我认为您无法理解UITableViewUICollectionView委托方法的工作原理。

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

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

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

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

答案 1 :(得分:1)

您的问题是您正在尝试在cellForRow函数中加载图像。到下载图像时,collectionView会显示另一个单元格。 其中一种正确的方法是将viewDidLoad中的图像加载到数组中,然后从cellForRow中的该数组加载。