如何将元素动态添加到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!
我很感激一个例子。
答案 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
中查看更多相关信息顺便说一句,重新加载数据可以很好地处理它,它取决于您和您的需求。