我有一个ListViewController,通过下面的方法添加视图
class ListViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let obj: AnObject = ObjectCollection!.getObject(index: indexPath.item)
let cell: UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: NSStringFromClass(UICollectionViewCell.self), for: indexPath as IndexPath)
let cellView: UIImageView = UIImageView(image: obj.image)
cellView.frame = cell.bounds
cell.contentView.addSubview(cellView)
return cell
}
问题是,当我删除单元格中的内容然后按后退按钮时,单元格不会被删除并显示之前的内容。
我的删除方法是
func deleteObject(index: Int) {
// delete from the collection
ObjectCollection?.deleteObject(index: index)
self.collectionView.reloadData()
}
我是否需要明确删除单元格或其内容?
答案 0 :(得分:1)
如果您尝试使用deleteItems方法,它可能会有效。
func deleteObject(indexPath: IndexPath) {
// delete from the collection
ObjectCollection.deleteObject(index: indexPath.row)
self.collectionView.deleteItems(at: [indexPath])
// self.collectionView.reloadData()
}
答案 1 :(得分:-1)
确保在reloaddata()
之前必须删除dataArray中的单元格和单元格的obj。
我认为方法numberOfItems:inSection
,你的代码是return dataArray.count
,但是你没有删除dataArray中的单元格的obj,所以当你reloaddata()时,你的单元格仍在这里。
现在,我知道你的问题,你有两个VC(让我们称之为VC1和VC2),你的单元格显示在VC1上,当你点击单元格,按下VC2,点击VC2的删除按钮,你要删除VC1的单元格,我是对的吗?
如果你想做出这样的努力,
您可以在VC2中创建protocol
,属性delegate
,协议方法,例如-(void)deleteCell
,
当您推送到VC2时,将VC1设置为VC2的委托,覆盖VC1中的协议方法,
单击VC2的删除按钮,在您的响应方法中,使用[self.delegate deleteCell]
。当你回到VC1时,它将自动删除单元格和单元格的obj。
同时,您也可以使用NSNotification
来付出努力。