嗨我有一个数组,其中有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
}
答案 0 :(得分:2)
我认为您无法理解UITableView
和UICollectionView
委托方法的工作原理。
iOS不会同时加载100个单元格,因为它会非常慢并且用户体验不佳。因此,仅当单元格出现在屏幕上时才会调用方法cellForItemAtIndexPath
或cellForRowAtIndexPath
。
每当向下滚动时,您将看到再次调用方法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中的该数组加载。