如何在uiviewcontroller中删除单元格

时间:2017-02-19 00:19:47

标签: ios swift uiviewcontroller

我有一个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()
    }

我是否需要明确删除单元格或其内容?

2 个答案:

答案 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, 当您推送到VC​​2时,将VC1设置为VC2的委托,覆盖VC1中的协议方法, 单击VC2的删除按钮,在您的响应方法中,使用[self.delegate deleteCell]。当你回到VC1时,它将自动删除单元格和单元格的obj。

同时,您也可以使用NSNotification来付出努力。