我正在尝试做以下事情:
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 以向用户显示其请求已被处理。但是,由于单元的可重用性,这反映在集合视图中的单元中。如何避免这种后备情况?我无法理解在这种情况下该怎么办。请同样帮我。
答案 0 :(得分:2)
您正在将invitedView.isHidden
中的false
状态更改为didSelectItemAt
,但没有在任何地方将其更改为true。
您必须添加:
cell?.invitedView.isHidden = true
in cellForItemAt
中,以便当单元被重用时它将改变状态。
这个问题的诱人之处。但是最好单独编写UICollectionViewDataSource
和UICollectionViewDelegate
只是为了使代码保持如下所示:
extension InviteViewController : UICollectionViewDataSource {
}
extension InviteViewController : UICollectionViewDelegate {
}