取消选择当前不可见的单元格

Posted

技术标签:

【中文标题】取消选择当前不可见的单元格【英文标题】:deselecting cells that are currently not visible 【发布时间】:2015-08-28 10:47:09 【问题描述】:

我正在尝试取消选择以前选择但当前在集合视图中不可见的单元格。我正在使用此代码:

        let optionalSelectedItems = collectionView.indexPathsForSelectedItems()
        if let selectedItems = optionalSelectedItems
        for indexPath in selectedItems

         self.collectionView.deselectItemAtIndexPath(indexPath, animated: true)
         self.collectionView.delegate?.collectionView!(self.collectionView, didDeselectItemAtIndexPath: indexPath)
        

在我的func collectionView(_:didDeselectItemAtIndexPath:) 实现中,有一些非常重要的事情正在发生。取消选择会触发其他视图中的事件。 这会引发错误,因为我正在取消选择当前不在屏幕上的单元格,因此甚至不在内存中。如何将单元格放入内存中仅一小段时间?我只需要取消选择它们,所以我猜 0.1 秒就足够了。

【问题讨论】:

我和UITableView有类似的问题;解决方案是致电super.tableView:deselectRowAtIndexPath: 在我的 collectionView(_:didDeselectItemAtIndexPath:) 实现中发生了一些非常重要的事情,需要调用它 【参考方案1】:

您可以将所选行的索引存储在单独的数组中,并在创建后选择/取消选择单元格

func collectionView(_ collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell

【讨论】:

当我按下特定按钮时,我正在取消选择所有单元格。如果我错了,请纠正我,但永远不会调用该方法,因为它仅在单元格可见时才调用。 那么如何触摸“当前不可见”单元格上的按钮? 按钮不是单元格。它是集合视图之外某处的普通 UIButton 实例。 好的,那么我的回答应该是正确的,如果单元格不可见则它不存在,因此您应该将所选单元格的索引保存在单独的数组中并独立管理。要将其与 UI 同步,您应该使用“cellForItemAtIndexPath”方法。 有两种情况。 1:我滚动集合视图以查看是否选择了单元格。 2:我不滚动,但单元格仍然被取消选择。取消选择单元格会触发另一个 UIView 中发生的事件。该事件必须在按下按钮的那一刻发生,并且在 collectionView(_:didDeselectItemAtIndexPath:) 中实现。当单元格可见时,“cellForItemAtIndexPath”将触发此事件,对我来说为时已晚。

以上是关于取消选择当前不可见的单元格的主要内容,如果未能解决你的问题,请参考以下文章

允许触摸表格单元格以取消其他当前触摸

预加载下一个(当前不可见)单元格 UICollectionView

iOS Swift UICollectionView 照片浏览 - 当单元格不可见时如何停止取消 DispatchQueue

重新加载后无法取消选择 UICollectionView 单元格

UITableView 在进入编辑模式时取消选择单元格

在每个单元格都包含表格视图的表格视图中选择新单元格时,无法取消选择先前选择的单元格