为啥以编程方式选择单元格后 - 单元格不是交互?
Posted
技术标签:
【中文标题】为啥以编程方式选择单元格后 - 单元格不是交互?【英文标题】:Why after selecting cell programmatically - cell is not interaction?为什么以编程方式选择单元格后 - 单元格不是交互? 【发布时间】:2020-07-29 14:10:11 【问题描述】:我在以编程方式选择的 collectionView 中设置了一个单元格:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(with: FAFavouriteCategoryCell.self, for: indexPath)!
let currentCategory = categories[indexPath.row]
cell.isSelected = selectedCategories.contains(currentCategory.categoryID)
cell.configCell(category: currentCategory)
return cell
在此之后所有选定的单元格都不起作用。我无法点击它。
如果我点击方法shouldDeselectItemAt
不调用
【问题讨论】:
您应该调用collectionView.selectItem(at indexPath: indexPath, animated: false, scrollPosition: .none)
而不是cell.isSelected
。
@Larme 我需要在初始化表时刻选择它。我应该在哪里称呼它?
【参考方案1】:
你需要像这样拨打selectItem
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(with: FAFavouriteCategoryCell.self, for: indexPath)!
let currentCategory = categories[indexPath.row]
if selectedCategories.contains(currentCategory.categoryID)
collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .left) //Add this line
cell.isSelected = true
else
collectionView.deselectItem(at: indexPath, animated: false)
cell.isSelected = false
cell.configCell(category: currentCategory)
return cell
【讨论】:
好。这是工作,但在第一次点击后(我需要在初始化时显示选定的项目 你不应该在 else 中调用 deselectItem (非写入)以避免重用潜在问题吗? isSelected 有必要吗?以上是关于为啥以编程方式选择单元格后 - 单元格不是交互?的主要内容,如果未能解决你的问题,请参考以下文章