如何删除单元格中的UIViewController

问题描述:

我有一个ListViewController通过以下如何删除单元格中的UIViewController

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

那么ObjectCollection是什么?因为很明显,一旦你从它删除对象,它不会被保存,否则当你重新加载你的tableView时它不会再显示 – Pierce

+1

当你调用'deleteObject'时,你确定'ObjectCollection'不是'nil'吗? – Losiowaty

+0

@Losiowaty是的,我相信它不是零。它确实将对象从集合中移除,因为一旦我通过单击它不显示的单元格来选择它。 – user2175783

确保reloaddata()之前必须删除单元格,并在您dataArray中的细胞的OBJ。

我认为方法numberOfItems:inSection,你的代码是return dataArray.count,但是你不会删除dataArray中的单元的obj,所以当你reloaddata()时,你的单元仍然在这里。现在,我知道你的问题,你有两个VC(让我们称之为VC1和VC2),你单元格显示在VC1上,当你点击单元格时,推到VC2,点击VC2的删除按钮,你想删除VC1的单元格, 我对吗 ?如果你想要做这方面的努力, 你可以做一个,属性delegate,协议的方法,如在VC2 -(void)deleteCell

, 当你推到VC2,设置VC1为VC2的委托,覆盖在协议方法您的VC1, 您单击VC2的删除按钮,在您的响应方法中,使用[self.delegate deleteCell]。当你回到VC1时,它会自动删除单元格和单元格的obj。

同时,您还可以使用NSNotification作出的努力。

+0

问题中有一个'deleteObject'方法,OP在提示中提到它正确调用。 – Losiowaty

如果您尝试deleteItems方法,它可能会工作。

func deleteObject(indexPath: IndexPath) { 
     // delete from the collection 
     ObjectCollection.deleteObject(index: indexPath.row) 
     self.collectionView.deleteItems(at: [indexPath]) 
//  self.collectionView.reloadData() 
    }