从子视图重新加载UICollectionview

时间:2017-09-13 06:33:43

标签: ios swift swift3 uicollectionview reload

我从我的一个uicollectionviewcells调用全屏子视图。此子视图将新单元格添加到集合视图中。在我从superview(uicollectionview)中删除这个子视图之前,我在uicollectionviewcontroller中从子视图本身调用update函数,如下所示,

func update() {
   self.uicollectionview?.reloadData()
}

但是在我杀死应用程序并重新打开它之前没有任何反应。我也使用了dequeue异步。但没有变化。任何帮助将不胜感激。 日Thnx,

更新1:

我从子视图中调用以下方法。在一些动画之后,subview将自己从superview中移除并调用superview控制器中的更新功能。我还交换了行并将removeFromSubview方法作为最后一次调用。但它没有奏效。

    func tapHandler(sender: UITapGestureRecognizer? = nil) {
    if sender?.state == .ended {
        UIView.animate(withDuration: 0.2, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .transitionCurlDown, animations: {
            self.recordButton.frame = CGRect(origin: self.recordButton.center, size: CGSize(width: 0, height: 0))
            self.timerLabel.frame = CGRect(origin: self.timerLabel.center, size: CGSize(width: 0, height: 0))
            self.circularProgressBar.frame = CGRect(origin: self.circularProgressBar.center, size: CGSize(width: 0, height: 0))

        }, completion: { (completed) in
            UIView.animate(withDuration: 0.2, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .transitionCurlDown, animations: {
                self.recorderView.frame = CGRect(origin: self.recorderView.center, size: CGSize(width: 0, height: 0))
                self.blurEffectView.effect = nil
            }, completion: { (animationCompleted) in


                self.removeFromSuperview()

                print("I am finished")
                let hdsc = HomeDatasourceController()
                hdsc.update()


            })
        })
    }
}

superview控制器中的更新方法如下

    func update() {
    print("update() func called")
    DispatchQueue.main.async {
        self.collectionView?.reloadData()
    }

此外,子视图被定义为超级视图控制器中的弱变量

weak var audioPlayerView: AudioPlayerView?
weak var audioRecorderView: AudioRecorderView?

2 个答案:

答案 0 :(得分:0)

尝试在主线程上调度重新加载。

dispatch_async(dispatch_get_main_queue(),{ [weak self] in
    self?.uicollectionview?.reloadData()
})

答案 1 :(得分:0)

我解决了自己的问题。我忘了提到我在我的集​​合视图中使用了LBTA组件API。在将新对象添加到数据源并现在它起作用后,我只是在更新函数中再次重置了我的数据源。

    func update() {
    print("update() func called")
    let hds = HomeDataSource()
    self.datasource = hds
    collectionView?.reloadData()
}

但很奇怪,我期待reloadData()函数会为我做这件事...感谢所有帮助过我的人......