如何在从 REST 服务加载元素时将元素动态添加到 UICollectionView (Swift)
How to dynamically add elements to UICollectionView as they are loaded from REST service (Swift)
当元素从 REST 服务加载到内存中时,如何将元素动态添加到 UICollectionView 中?
现在我正在打电话
.reloadData()
在我的 UICollectionView IBOutlet 上,但我认为这不是最佳做法。
我试过使用 performBatchUpdate,但没能成功。
self.photoCollView.performBatchUpdates({
self.photoCollView.insertItemsAtIndexPaths(NSArray(object: photo) as [AnyObject])
}, completion: nil)
我在这里尝试将照片对象插入到 photoCollView 中,它是 UICollectionVIew 的 IBOutlet。
@IBOutlet var photoCollView: UICollectionView!
我希望能举个例子。
有很多方法,如果您进行少量更改,可以使用 reloadData() 函数。有多小,你需要做性能测试。
另一种方法是执行批量更新,它们可以是 "segmented" 少量,您不需要在一次输入中输入来自其余服务的所有数据。
在 CollectionView Programing Guide by Apple
中查看更多相关信息
对了,reload数据可以很好的处理,看你自己的需要了。
我找到了解决方案。
这是我与 UICollectionView
的连接
@IBOutlet var photoCollView: UICollectionView!
我的照片数组是一个简单的Swift照片对象集合
var photos = [Photo]()
这是一个简单的class
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: [=13=], inSection: 0)
}
, completion: nil)
不幸的是,我对 Swift 语言还很陌生,所以我不知道到底发生了什么。但据我所知,我在添加新元素之前坚持数组计数。然后我用两个参数调用 map,旧计数和新计数。在地图闭包内,创建了一个新的 NSIndexPath
inSection: 0
,这是我想要的,因为现在我只持有 1 个部分。
我无法理解的这两件事是 lastItem..<self.photos.count>
和 forItem: [=17=]
的作用。
当元素从 REST 服务加载到内存中时,如何将元素动态添加到 UICollectionView 中?
现在我正在打电话
.reloadData()
在我的 UICollectionView IBOutlet 上,但我认为这不是最佳做法。
我试过使用 performBatchUpdate,但没能成功。
self.photoCollView.performBatchUpdates({
self.photoCollView.insertItemsAtIndexPaths(NSArray(object: photo) as [AnyObject])
}, completion: nil)
我在这里尝试将照片对象插入到 photoCollView 中,它是 UICollectionVIew 的 IBOutlet。
@IBOutlet var photoCollView: UICollectionView!
我希望能举个例子。
有很多方法,如果您进行少量更改,可以使用 reloadData() 函数。有多小,你需要做性能测试。
另一种方法是执行批量更新,它们可以是 "segmented" 少量,您不需要在一次输入中输入来自其余服务的所有数据。 在 CollectionView Programing Guide by Apple
中查看更多相关信息对了,reload数据可以很好的处理,看你自己的需要了。
我找到了解决方案。 这是我与 UICollectionView
的连接@IBOutlet var photoCollView: UICollectionView!
我的照片数组是一个简单的Swift照片对象集合
var photos = [Photo]()
这是一个简单的class
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: [=13=], inSection: 0)
}
, completion: nil)
不幸的是,我对 Swift 语言还很陌生,所以我不知道到底发生了什么。但据我所知,我在添加新元素之前坚持数组计数。然后我用两个参数调用 map,旧计数和新计数。在地图闭包内,创建了一个新的 NSIndexPath
inSection: 0
,这是我想要的,因为现在我只持有 1 个部分。
我无法理解的这两件事是 lastItem..<self.photos.count>
和 forItem: [=17=]
的作用。