Ios 如何在uiviewcontroller中删除单元格
我有一个ListViewController,它通过下面的方法添加一个视图Ios 如何在uiviewcontroller中删除单元格,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我有一个ListViewController,它通过下面的方法添加一个视图 class ListViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICo
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在评论中提到它被正确调用。