从子视图重新加载 UICollectionview
Reloading UICollectionview from subview
我从我的一个 uicollectionviewcells 调用全屏子视图。此子视图将新单元格添加到集合视图。在我从它的超级视图 (uicollectionview) 中删除这个子视图本身之前,我在 uicollectionviewcontroller 中从子视图本身调用更新函数,如下所示,
func update() {
self.uicollectionview?.reloadData()
}
但在我终止应用程序并重新打开它之前,什么也没有发生。我还使用了出队异步。但是什么都没有改变。任何帮助将不胜感激。
谢谢,
更新 1:
我从我的子视图调用以下方法。在一些动画之后,子视图将自身从父视图中移除并调用父视图控制器中的更新函数。我还交换了线路并将 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 controller中的update方法如下
func update() {
print("update() func called")
DispatchQueue.main.async {
self.collectionView?.reloadData()
}
子视图也被定义为父视图控制器中的弱变量
weak var audioPlayerView: AudioPlayerView?
weak var audioRecorderView: AudioRecorderView?
尝试在主线程上调度重新加载。
dispatch_async(dispatch_get_main_queue(),{ [weak self] in
self?.uicollectionview?.reloadData()
})
我解决了我自己的问题。我忘了提及我在 collection 视图中使用 LBTA 组件 API。在将新的 objects 添加到数据源后,我只是在更新功能中再次重置了我的数据源,现在它可以运行了。
func update() {
print("update() func called")
let hds = HomeDataSource()
self.datasource = hds
collectionView?.reloadData()
}
但很奇怪,我原以为 reloadData() 函数会为我做这件事...感谢所有帮助我完成任务的人...
我从我的一个 uicollectionviewcells 调用全屏子视图。此子视图将新单元格添加到集合视图。在我从它的超级视图 (uicollectionview) 中删除这个子视图本身之前,我在 uicollectionviewcontroller 中从子视图本身调用更新函数,如下所示,
func update() {
self.uicollectionview?.reloadData()
}
但在我终止应用程序并重新打开它之前,什么也没有发生。我还使用了出队异步。但是什么都没有改变。任何帮助将不胜感激。 谢谢,
更新 1:
我从我的子视图调用以下方法。在一些动画之后,子视图将自身从父视图中移除并调用父视图控制器中的更新函数。我还交换了线路并将 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 controller中的update方法如下
func update() {
print("update() func called")
DispatchQueue.main.async {
self.collectionView?.reloadData()
}
子视图也被定义为父视图控制器中的弱变量
weak var audioPlayerView: AudioPlayerView?
weak var audioRecorderView: AudioRecorderView?
尝试在主线程上调度重新加载。
dispatch_async(dispatch_get_main_queue(),{ [weak self] in
self?.uicollectionview?.reloadData()
})
我解决了我自己的问题。我忘了提及我在 collection 视图中使用 LBTA 组件 API。在将新的 objects 添加到数据源后,我只是在更新功能中再次重置了我的数据源,现在它可以运行了。
func update() {
print("update() func called")
let hds = HomeDataSource()
self.datasource = hds
collectionView?.reloadData()
}
但很奇怪,我原以为 reloadData() 函数会为我做这件事...感谢所有帮助我完成任务的人...