ios 如何在删除单元格后重新加载CollectionView

lskq00tm  于 2023-02-01  发布在  iOS
关注(0)|答案(2)|浏览(133)

我有一个CollectionView,它显示从在线Web应用程序填充的单元格,当单击该应用程序时,会给予从该Web应用程序中删除的选项。
我使用了一个完成处理程序,只在API调用成功并且web应用程序不再存储该单元格时才重新加载数据。然而,reloadData()在被调用时不会少显示一个单元格。我尝试了layoutIfNeeded()、setNeedsDisplay()和collectionViewLayout.invalidateLayout()。
它们都不执行任何操作,被删除的单元格始终保留在那里。**但是,如果我使用导航控制器向后移动,然后再次前进到CollectionView视图,它就消失了。**有人能提出解决方案吗?

@IBOutlet weak var inviteCollectionView: UICollectionView
 func declineInvite(id: Int)
{
    requestModel.deleteRequest(id: id, completion: { success in
        if(success)
        {
            DispatchQueue.main.async {
                print("This happens")


                    self.inviteCollectionView.collectionViewLayout.invalidateLayout()

                    self.inviteCollectionView.reloadData()
                    self.inviteCollectionView.layoutIfNeeded()
            }

        }
        else{
            print("Failed deleting group")
        }

    })
}

更新章节中的项目数量:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return requestTuples.count
}

请求元组来自

override func viewDidLoad() {

    (requestModel.getRequests()

        {(returnValue)
            in self.requestTuples = (returnValue)

    })
xu3bshqb

xu3bshqb1#

删除请求的问题在于,您没有从数组requestTuples中移除具有指定id的项,而只是重新加载了collectionView

func declineInvite(id: Int) {
    requestModel.deleteRequest(id: id, completion: { success in
        if(success) {
            DispatchQueue.main.async {  
                self.requestTuples.remove(at:id)
                self.inviteCollectionView.reloadData()
            }
        } else {
            print("Failed deleting group")
        }
    })
}
sr4lhrrt

sr4lhrrt2#

为了避免重新加载整个集合(效率非常低),最好使用deleteItems函数(当然总是在用源代码更新数组之后!)

func deleteItems(at indexPaths: [IndexPath])

https://developer.apple.com/documentation/uikit/uicollectionview/1618060-deleteitems

相关问题