【问题标题】:In cellForItemAt collection view is not updating indexPath by collectionView.reloadData() in swift 3在 cellForItemAt 集合视图中,swift 3 中的 collectionView.reloadData() 没有更新 indexPath
【发布时间】:2018-01-11 13:28:20
【问题描述】:

我实际上想创建具有行和列的表,并使用 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 这样的单元格数量。仅此而已。

但我必须创建从服务器获取的单元数。动态的。

我花了很多时间。请帮助我哪里错了。或者我该如何解决这个问题。

【问题讨论】:

  • 只是一个想法,您实际上并不需要创建一个集合视图来拥有列。如果我有列,我只需创建一个带有多个标签和/或图像的表格视图单元格。想不出为什么需要集合视图
  • 在 collectionView 中,您可以制作单元格,您可以为其制作自定义标题背景。和其他单元格的底部值。我也想让第一行和第一列不可移动。以及可在其下方滚动的其他行和列。所以我更喜欢收藏视图。
  • 我想要一个解决方案。 y 是这个 collectionView.reloadData() 函数不更新 IndexPath。当我的 dataArray 更新时。从 numberOfSections 函数返回的单元格数是正确的。这个怎么不更新了。我错在哪里。我需要知道。改天我可能不得不使用collectionview。所以我想找出我的错误。谢谢@Delimiter
  • 如果 indexPath 为 1,则意味着 data.count 等于 0。您是否尝试过使用断点检查 portfolioHandler 和 portfolioHandler.data 对象的状态?
  • 你在哪里打电话insertItemsAtIndexPaths:?

标签: ios swift uicollectionview reload indexpath


【解决方案1】:

在所有尝试之后。我无法解决这个集合视图的重新加载问题。

但是我通过这个技巧在我的应用程序中处理了这个

集合视图第一次正确地制作单元格。问题在于重新加载。所以我在进入这个 View Controller 之前在之前的 View Controller 中提出了我的服务器请求。并将响应发送到此视图控制器。这边走。我有很多细胞要做。所以它奏效了。

但作为一名学习者,我期待这个重新加载问题的答案和真正的解决方案。

我会很感激的。虽然感谢@ɯɐɹʞ为你的cmets。

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多