我有一个CollectionView问题,我a video显示了下面详述的问题。当我点击一个单元格时,它以奇怪的方式移动。 这是我的代码:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
selectedFilter = indexPath.row
if filters[indexPath.row] != "Todo" {
filteredNews = news.filter { $0.category == filters[indexPath.row] }
} else {
filteredNews = news
}
tableView.reloadData()
collectionView.reloadData()
}
My Cell正在移动,(只是最后一个细胞,不知道为什么)。
我认为它可能与collectionView.reloadData()有关但是当我选择一个Cell时,我需要更新绿色栏,你可以看到on this Video。
我怎么能让它不动?有人有类似的问题吗?
答案 0 :(得分:1)
我注意到你在collectionView didSelectItemAt期间重新加载了一个tableView。如果那个tableView是你的collectionView的superView,那将是你出现这种异常行为的确切原因。
如果不是,我可以提供3种解决方案:
了解当您重新加载表/集合视图时,它不会更改当前的可见单元格。但是,每个单元格中的任何内容都会受到影响。
答案 1 :(得分:0)
最后我解决了!我删除了collectionView.reloadData()并添加了我的代码以更改didSelectItem内的颜色更改当前所选项目和旧选定项目(我创建了一个变量以查看哪个是旧选定项目。)
如果有人有兴趣,这是我的代码:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let oldSelectedFilter = selectedFilter
if selectedFilter != indexPath.row {
let oldIndexPath = IndexPath(item: oldSelectedFilter, section: 0)
selectedFilter = indexPath.row
if filters[indexPath.row] != "Todo" {
filteredNews = news.filter { $0.category == filters[indexPath.row] }
} else {
filteredNews = news
}
if let cell = collectionView.cellForItem(at: indexPath) as? FiltersCollectionViewCell {
cell.selectedView.backgroundColor = MainColor
}
if let cell = collectionView.cellForItem(at: oldIndexPath) as? FiltersCollectionViewCell {
cell.selectedView.backgroundColor = UIColor(red:0.31, green:0.33, blue:0.35, alpha:1.0)
}
tableView.reloadData()
}
}