取消选择当前不可见的单元格
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