【发布时间】:2018-02-21 17:50:48
【问题描述】:
我从我的 uicollectionviewcell 之一调用全屏子视图。此子视图将新单元格添加到集合视图。在我从其父视图(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控制器中的更新方法如下
func update() {
print("update() func called")
DispatchQueue.main.async {
self.collectionView?.reloadData()
}
子视图在超级视图控制器中也被定义为弱变量
weak var audioPlayerView: AudioPlayerView?
weak var audioRecorderView: AudioRecorderView?
【问题讨论】:
-
是否在主线程上调用更新? uiCollectionView 引用是否为非 nil
-
替换行
self.uicollectionview!.reloadData()如果这是 nil 它将崩溃。 -
那你就可以找出问题所在了
-
所以我测试了你的代码,虽然这个条件是真的:如果 sender?.state == .ended 它工作,你的collectionview没有重新加载由于这个代码......:让hdsc = HomeDatasourceController () hdsc.update() .... HomeDatasourceController() 做了什么看起来很奇怪,因为在这里你应该在已经存在的集合视图上调用更新,你是用那个代码创建它吗?
-
homedatasource Controller是collectionview控制器(app的主控制器)。我在我的记录器子视图中创建了 homedata sourcecontroller 的实例,以调用 homedatasourcecontroller 中的 update() 函数。当我调用更新时,我看到调用了 homedatasourcecontroller 的 viewdidload。也许你是对的,也许我无法解决已经存在的 homedatasourcecontroller。
标签: ios swift swift3 uicollectionview reload