可重复使用的“收集视图”单元格显示异常行为

时间:2018-10-22 14:18:15

标签: ios swift xcode

我正在尝试做以下事情:

var timer = Timer()
timer.invalidate()

extension InviteViewController : UICollectionViewDataSource, UICollectionViewDelegate {

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return totalItems 
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "IT1Cell", for: indexPath) as! InviteTasker1CellView
        cell.delegate = self
        cell.taskerName.text = names[indexPath.item]

        return cell


    }

    @objc func deleteCellUtil()
    {
        totalItems -= 1
        names.remove(at: selectedIndexPath.item)
        collectionView1.deleteItems(at: [selectedIndexPath])
        timer.invalidate()
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if(!timer.isValid)
        {
            let cell = collectionView.cellForItem(at: indexPath) as? InviteTasker1CellView
            selectedIndexPath = indexPath
            cell?.invitedView.isHidden = false
            timer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(deleteCellUtil), userInfo: nil, repeats: false)

        }

    }

}

当用户单击某个单元格时,该单元格将被删除。删除之前,我正在设置单元格?.invitedView.isHidden = false 以向用户显示其请求已被处理。但是,由于单元的可重用性,这反映在集合视图中的单元中。如何避免这种后备情况?我无法理解在这种情况下该怎么办。请同样帮我。

1 个答案:

答案 0 :(得分:2)

您正在将invitedView.isHidden中的false状态更改为didSelectItemAt,但没有在任何地方将其更改为true。

您必须添加:

cell?.invitedView.isHidden = true

in cellForItemAt中,以便当单元被重用时它将改变状态。

这个问题的诱人之处。但是最好单独编写UICollectionViewDataSourceUICollectionViewDelegate只是为了使代码保持如下所示:

extension InviteViewController : UICollectionViewDataSource {
}

extension InviteViewController : UICollectionViewDelegate {
}