我正在处理应该在UICollectionView
中显示图片的iPhone应用。图像保存在Parse云上,我使用PFQueryCollectionViewController
的子类进行查询并显示图像。
点击MKMapView
标注会触发显示CollectionViewController
的segue。第一次出现CollectionViewController
时,图像不会出现在单元格中。但是,如果我返回MapView
,然后返回CollectionViewController
,则图片会显示在单元格中。
如何在第一次出现PFQueryCollectionViewController
时让图像显示?
这是我的代码:
class PhotoGridCollectionViewController: PFQueryCollectionViewController {
override func viewDidAppear(animated: Bool) {
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: UICollectionViewDataSource
override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
//#warning Incomplete method implementation -- Return the number of sections
return 1
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
//#warning Incomplete method implementation -- Return the number of items in the section
return self.objects.count
}
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFCollectionViewCell? {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("venuePhotoThumb", forIndexPath: indexPath) as! PhotoGridCollectionViewCell
if let pfObject = object {
cell.imageView.file = pfObject["imageFile"] as? PFFile
cell.imageView.loadInBackground({ (img, err) -> Void in
println("Download complete")
})
}
return cell
}
}
由于我使用的是故事板,我通过在属性检查器中设置parseClass
来传递我的自定义类:
正如您所看到的,我使用loadInBackground
的{{1}}方法异步加载图像,我认为问题可能是由于图像被下载后导致的细胞被退回,但我没有任何其他想法。有谁知道为什么第一次出现视图时图像没有出现?
答案 0 :(得分:2)
我的合作开发者终于找到了答案。在PFImageViews
中配置单元格时,我们必须为cellForItemAtIndexPath
设置占位符图像。 Parse上的代码示例包括设置占位符图像,但他们并不是说PFQueryCollectionViewController
需要正常工作。我们认为这是一种美感,我们可以在以后回来。
所以答案是:为了在PFQueryCollectionViewController
的单元格中正确加载图像,在cellForItemAtIndexPath
中配置单元格时,必须提供占位符图像。
以下是有效的代码:
let placeholder = UIImage(named: "myPlaceholderImage") //an image from images.xcassets in your xcode project
cell.imageView.image = placeholder
if let pfObject = object {
cell.imageView.file = pfObject["image"] as? PFFile
cell.imageView.loadInBackground()
}