如何刷新collectionview或tableview中的数据仅用于更新?

时间:2018-03-24 14:22:37

标签: ios swift uicollectionview

我怎样才能在collectionview或tableview中刷新或重新加载新添加的数据,而不是重新加载所有数据?现在我正在使用以下代码,但它查询数据库服务器以获取所有数据然后重新加载所有内容。例如,我只在服务器上上传一张照片,所以我只想获取该照片并重新加载collectionview,仅用于这个新添加的照片不加载每一个。我怎样才能做到这一点?谢谢!

func loadPosts(){

    let query = PFQuery(className: "posts")
    query.whereKey("username", equalTo:PFUser.current()!.username!) 
    query.limit = page
    query.findObjectsInBackground { (objects, error) in

        if error == nil {
            self.picArray.removeAll(keepingCapacity: false)

         if let objects  = objects{ 
            for object in objects{
                self.picArray.append(object.value(forKey: "pic") as! PFFile)
            }
          }
            self.collectionView?.reloadData()
        } else{
            print(error!.localizedDescription)
        }
    }
 }

集合视图功能

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return picArray.count
    }

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        //define cell

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! pictureCell

        picArray[indexPath.row].getDataInBackground { (data, error) in

            if error == nil {
                cell.picImg.image = UIImage(data: data!)
            } else {
                print(error!.localizedDescription)
            }
        }

        return cell
    }

1 个答案:

答案 0 :(得分:0)

最终我建议将图片请求移出cellForItem,因为根据用户滚动行为会调用它,但是现在这样可行。

您需要检查图片是否已加载,然后使用reloadItems代替reloadData,以便cellForItem中的新版块如下所示:

if (cell.picImg.image == nil) {
    picArray[indexPath.row].getDataInBackground { (data, error) in

        if error == nil {
            cell.picImg.image = UIImage(data: data!)
            collectionView.reloadItems(at: indexPath) //reload only this item once the image is retrieved
        } else {
            print(error!.localizedDescription)
        }
    }
}