如何在从REST服务加载UICollectionView时动态添加元素(Swift)

时间:2015-07-07 19:15:30

标签: ios xcode swift rest uicollectionview

如何将元素动态添加到UICollectionView,因为它们是从REST服务加载到内存中的?

现在我正在打电话

.reloadData()

在我的UICollectionView IBOutlet上,但我不认为这是最佳做法。

我尝试过performBatchUpdate,但我没有设法让它工作。

self.photoCollView.performBatchUpdates({
self.photoCollView.insertItemsAtIndexPaths(NSArray(object: photo) as [AnyObject])
                }, completion: nil)

这里我试图将一个照片对象插入到photoCollView中,这是一个UICollectionVIew的IBOutlet。

@IBOutlet var photoCollView: UICollectionView!

我很感激一个例子。

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。 这是我与UICollectionView的连接

@IBOutlet var photoCollView: UICollectionView!

My Photo数组是Photo对象的简单Swift集合

var photos = [Photo]()

这是一个简单的类

class Photo {
    let name: String
    let url: String

    init(name:String, url:String){
        self.name = name
        self.url = url
    }
}

这就是我在不使用reloadData()方法的情况下向此collectionView添加元素的方法。

self.photoCollView.performBatchUpdates({
let lastItem = self.photos.count
self.photos.append(photo)
let indexPaths = let indexPaths = map(lastItem..<self.photos.count)
{ 
    NSIndexPath(forItem: $0, inSection: 0) 
}
, completion: nil)

不幸的是,我并不知道究竟发生了什么,因为我对Swift语言并不熟悉。但是根据我的理解,我在添加新元素之前一直坚持数组计数。然后我用两个参数调用map,旧计数和新计数。在地图关闭内部创建了一个新的NSIndexPath inSection: 0,这就是我想要的,因为现在我只能将1个部分放在一起。 我无法理解的两件事是lastItem..<self.photos.count>forItem: $0所做的事。

答案 1 :(得分:0)

有许多方法,如果您进行少量更改,可以使用reloadData()函数。它们有多小,你需要进行性能测试。

另一种方法是执行批量更新,它们可以是&#34;分段&#34;少量,您不需要在一个输入中输入来自其余服务的所有数据。 在CollectionView Programing Guide by Apple

中查看更多相关信息

顺便说一句,重新加载数据可以很好地处理它,它取决于您和您的需求。