Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在uiviewcontroller中删除单元格_Ios_Swift_Uiviewcontroller - Fatal编程技术网

Ios 如何在uiviewcontroller中删除单元格

Ios 如何在uiviewcontroller中删除单元格,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我有一个ListViewController,它通过下面的方法添加一个视图 class ListViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICo

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

是否需要显式删除单元格或其内容?

在重新加载数据()之前,请确保您必须删除dataArray中的单元格及其对象

我认为方法
numberOfItems:instation
,您的代码是
returndataarray.count
,但您没有在dataArray中删除单元格的obj,因此当您重新加载data()时,您的单元格仍然在这里

现在,我知道你的问题了,你有两个VC(我们称之为VC1和VC2),你的单元格显示在VC1上,当你点击单元格,按下VC2,点击VC2的删除按钮,你想删除VC1的单元格,对吗

如果你想做出这样的努力, 您可以在VC2中创建一个
协议
、一个属性
委托
、一个协议方法,例如
-(void)deleteCell
, 推送到VC2时,将VC1设置为VC2的委托,覆盖VC1中的协议方法, 单击VC2的删除按钮,在响应方法中,使用
[self.delegate deleteCell]
。当您返回VC1时,它将自动删除单元格和单元格的obj


同时,您还可以使用
NSNotification
进行操作。

确保在
reloaddata()
之前必须删除数据数组中的单元格和单元格的obj

我认为方法
numberOfItems:instation
,您的代码是
returndataarray.count
,但您没有在dataArray中删除单元格的obj,因此当您重新加载data()时,您的单元格仍然在这里

现在,我知道你的问题了,你有两个VC(我们称之为VC1和VC2),你的单元格显示在VC1上,当你点击单元格,按下VC2,点击VC2的删除按钮,你想删除VC1的单元格,对吗

如果你想做出这样的努力, 您可以在VC2中创建一个
协议
、一个属性
委托
、一个协议方法,例如
-(void)deleteCell
, 推送到VC2时,将VC1设置为VC2的委托,覆盖VC1中的协议方法, 单击VC2的删除按钮,在响应方法中,使用
[self.delegate deleteCell]
。当您返回VC1时,它将自动删除单元格和单元格的obj


同时,您还可以使用
NSNotification
来完成这项工作。

如果您尝试deleteItems方法,它可能会起作用

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

如果您尝试deleteItems方法,它可能会起作用

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

那么什么是
ObjectCollection
?因为很明显,一旦您从中删除对象,它就不会被保存,否则当您重新加载TableView时,它不会再次显示。当您调用
deleteObject
时,您确定
ObjectCollection
不是
nil
吗?@Losiowaty是的,我确定它不是nil。它确实会从集合中删除该对象,因为一旦我通过单击单元格选择该对象,它就不会显示。
viewdide
应该是您要查找的对象。再澄清一件事,
deleteObject
中的
collectionView
来自哪里?我刚刚意识到删除是在一个单独的控制器中进行的,对吗?每次调用cellForItemAt方法时,都会创建cellView并将其添加为子视图。您应该添加一些代码来管理cellView对象,因为您的单元格是可重用的。也许,它不会解决您在本文中提出的问题,但它会解决一些其他潜在的问题?因为很明显,一旦您从中删除对象,它就不会被保存,否则当您重新加载TableView时,它不会再次显示。当您调用
deleteObject
时,您确定
ObjectCollection
不是
nil
吗?@Losiowaty是的,我确定它不是nil。它确实会从集合中删除该对象,因为一旦我通过单击单元格选择该对象,它就不会显示。
viewdide
应该是您要查找的对象。再澄清一件事,
deleteObject
中的
collectionView
来自哪里?我刚刚意识到删除是在一个单独的控制器中进行的,对吗?每次调用cellForItemAt方法时,都会创建cellView并将其添加为子视图。您应该添加一些代码来管理cellView对象,因为您的单元格是可重用的。也许,它不会解决你在这篇文章中提出的问题,但它会解决一些其他潜在的问题。问题中有一个
deleteObject
方法,在评论中提到它被正确调用。问题中有一个
deleteObject
方法,而OP在评论中提到它被正确调用。