1

我正在开发一个 iPhone 应用程序,该应用程序应该以UICollectionView. 图像保存在 Parse 云中,我使用 的子类PFQueryCollectionViewController进行查询并显示图像。

点击MKMapView标注会触发显示CollectionViewController. 第一次呈现时,图像不会出现在单元格中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方法PFImageView,我认为这个问题可能是由于返回单元格后正在下载的图像引起的,但我没有任何其他想法。有谁知道为什么在第一次呈现视图时图像没有出现?

4

1 回答 1

2

我的共同开发者终于找到了答案。PFImageViews在配置单元格时,我们必须为cellForItemAtIndexPath. Parse 上的代码示例确实包括设置占位符图像,但他们没有说它是PFQueryCollectionViewController正常工作所必需的。我们认为这是一种美学风格,我们可以稍后再谈。

所以答案是:为了让图像正确加载到 a 的单元格中,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()
}
于 2015-07-07T14:00:48.673 回答