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

时间:2018-03-07 18:35:56

标签: ios swift uicollectionview

我有一个CollectionView,显示从在线Web应用程序填充的单元格,单击该对话框时,可以选择从该Web应用程序中删除。

如果api调用成功并且Web应用程序不再存储该单元,我使用完成处理程序仅重新加载数据。但是,reloadData()在调用时不会显示少一个单元格。我尝试过layoutIfNeeded(),setNeedsDisplay()和collectionViewLayout.invalidateLayout()。

他们都没有做任何事情,删除的单元格总是留在那里.. 但是如果我使用导航控制器向后移动然后再使用CollectionView前往视图,它就会消失。有人可以提出解决方案吗?

private func startWaterfallAnimation() {
    var timer = Timer.init()
    timer = Timer.scheduledTimer(withTimeInterval: 0.06, repeats: true) { (_) in
        if !self.isPaused{
            UIView.animate(withDuration: 0.06, delay: 0, options: [.curveLinear], animations: {
                self.setContentOffset(CGPoint(x: self.contentOffset.x, y: self.contentOffset.y - CGFloat(self.speed)), animated: false)
            }, completion: nil)
        } else {
            timer.invalidate()
        }
    }
}

使用numberOfItemsInSection更新:

 @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")
        }

    })
}

requestTuples来自

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

1 个答案:

答案 0 :(得分:0)

您的删除请求的问题是您没有从具有指定ID的数组requestTuples中删除该项,您只需重新加载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")
        }
    })
}