【问题标题】:PerformBatchUpdates for collection view completion handler not being executed未执行集合视图完成处理程序的 PerformBatchUpdates
【发布时间】:2019-11-27 03:38:51
【问题描述】:

我目前遇到的有趣问题。在 UICollectionView 的实例上调用 performBatchUpdates 方法时,某些情况会导致完成处理程序不被执行。

collectionView.performBatchUpdates({
            collectionView.insertItems(at: indexPaths)
        }) { _ in
            if self.delegate.responds(to: #selector(self.delegate.sectionNeedsToBeHidden)) {
                self.delegate.sectionNeedsToBeHidden?()
            }
        }
    }

collection view 执行插入操作时,不会调用完成处理程序。但是,当执行相同的逻辑时,除了将行 collectionView.insertItems(at: indexPaths) 更改为 collectionView.deleteItems(at: indexPaths) 之外,完成处理程序将被调用。我目前对为什么会发生这种情况的猜测与集合视图的先前状态有关,因此它只是在删除时注册对数据源的更改,从而导致调用完成处理程序。但是,该解决方案不能确定为什么 performBatchUpdatescompletionHandler 仅在删除项目而不是插入项目时被调用。如果有人对这个确切的问题或performBatchUpdates 的工作方式有任何见解,我将不胜感激

【问题讨论】:

    标签: ios objective-c swift iphone mobile


    【解决方案1】:

    每当您从集合视图中插入一行或删除一个项目时,您都必须更新一些项目数据,如下面的代码

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.myItems.count
    }
    

    self.myItems.count需要先更新。因此,首先更新您的项目计数,然后执行批量更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-16
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      相关资源
      最近更新 更多