我实际上想创建带有行和列的表,并使用 UICollectionView 执行此操作。问题在于重新加载或更新 collectionView 以在我的表中添加或删除行。列和硬编码,即 4。
我就是这样做的;
- 从情节提要创建 CollectionView
- 加载页面后。获取数据的路径
- 获取数据后,将获取的数据保存在数组对象中。
- 通过 collectionView.reloadData() 使用数组的大小更新集合视图。
从这里开始。将故事板中的集合视图引用到我的 viewController
@IBOutlet weak var collectionView: UICollectionView!
然后在“viewDidLoad”中。
self.collectionView.delegate = self
self.collectionView.dataSource = self
现在得到服务器的响应后。我正在更新我的数组,从中获得要创建的行数。之后这就是我重新加载collectionView的方式。
DispatchQueue.main.async
{
self.collectionView.collectionViewLayout.invalidateLayout()
self.collectionView.reloadData()
print("size of the array is(self.portfolioHandler.data.count)")
}
在我的 numberOfSections 函数中。我正在创建正确数量的单元格。也回来了。
func numberOfSections(in collectionView: UICollectionView) -> Int {
var toReturn : Int = 1
if (self.portfolioHandler != nil) {
let data : [PortfolioData] = self.portfolioHandler.data!
print("dataCount : \(data.count)")
toReturn = data.count + 1
print("toReturn : \(toReturn)")
}
return toReturn
}
通过日志,我得到了返回的号码。它是正确的并正确返回数据。
现在在我的 cellForItem 索引函数中。IndexPath 未更新。它仍然是 1. 我正在创建的顶部标题。它下面没有细胞。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! MyCollectionViewCell
print("section: \(indexPath.section) && row: \(indexPath.row)")
在我尝试了一切之后。没有什么能帮助我在我的 collectionView 中创建正确的单元格。
一个技巧可以奏效。只有当我在开始的 numberOfSections 中给出硬编码值时。然后在服务器响应并重新加载collectionView 之后,它将创建像我上面硬编码的3 或4 这样的单元格数量。仅此而已。
但我必须创建从服务器获取的单元数。动态的。
我花了很多时间。请帮助我哪里错了。或者我如何解决这个问题。