为啥以编程方式选择单元格后 - 单元格不是交互?

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 有必要吗?

以上是关于为啥以编程方式选择单元格后 - 单元格不是交互?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在集合视图单元格中以编程方式创建的按钮需要是惰性变量?

在点击不可选择的单元格后取消选择以前选择的 UICollectionViewCells

poi Java生成excel合并单元格后字体居中

excel合并单元格后怎么边框线没了?

为啥我无法在 collectionView 中选择单元格?

自定义 UITableView 单元格 Nib 文件仅在选择单元格后显示?