为啥当我向下滚动iOS(tableView内的collectionview)时取消选择单元格?

Posted

技术标签:

【中文标题】为啥当我向下滚动iOS(tableView内的collectionview)时取消选择单元格?【英文标题】:Why cell is deselect when I scroll down iOS (collectionview inside tableView)?为什么当我向下滚动iOS(tableView内的collectionview)时取消选择单元格? 【发布时间】:2020-09-30 08:21:21 【问题描述】:

我在 tableviewcell 中有一个带有 multiselect 的 collectionview。当我向下滚动时 - 选定的单元格被取消选择。 CollectionViewDelegate 和 DataSource 包含在单元格中。 TableView 只包含这个单元格。我认为,当 TableView 尝试重用单元格时会出现问题。

class CategoryCollectionCell: UITableViewCell 
    
    @IBOutlet weak var collectionView: UICollectionView!
    static let identefier = "CategoryCollectionCell"

    private var items: [Value] = [] 
        didSet 
            collectionView.reloadData()
        
    

    override func awakeFromNib() 
        super.awakeFromNib()
        commonInit()
    
    
   
    private func commonInit() 
        collectionView.delegate = self
        collectionView.dataSource = self
        collectionView.allowsMultipleSelection = true
    
    
    func config(items: [Value]) 
        self.items = items
    
    
   


extension CategoryCollectionCell: UICollectionViewDataSource 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        items.count
    
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CategoryCell.identefier, for: indexPath) as! CategoryCell
        cell.config(text: items[indexPath.row].name)
        cell.layoutIfNeeded()
        return cell
    

【问题讨论】:

【参考方案1】:

在您的func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 中,您必须将单元格设置为已选中(如果之前已选中)。

ios 在重用之前重置每个单元格。如果显示之前的每个单元格都应该被选中,你必须检查你的数据。

您可以在自定义 UICollectionViewCell 类中设置自定义方法,也可以使用内置函数将单元格设置为选中

cell.isSelected = true

【讨论】:

以上是关于为啥当我向下滚动iOS(tableView内的collectionview)时取消选择单元格?的主要内容,如果未能解决你的问题,请参考以下文章

滚动视图内的pageviewcontroller内的iOS tableview

当我向下滚动时,为什么我看到更多单元格而不是numberOfRowsInSection返回值?

SWRevealController TableView 滚动状态栏

动态改变 UITableView 高度

当表格视图向上滚动时,表格视图第一部分(第 0 部分)没有向上移动

NestedScrollview 内的 RecyclerView 滚动不顺畅