在我看来,这些情况都是平行的:
在任何情况下,我的视图控制器不再是“最前面的”视图控制器,然后成为“最前面的”一次。我觉得奇怪的是,iOS版已经没有单一的毯子“成了最前面的”发送到涵盖所有这些情况下,我的视图控制器事件。
我想我可以单独覆盖每个这样的情况下,我认为这些都是我需要涵盖所有情况,但最终的代码混乱和分散:
viewDidAppear
检测全屏呈现视图控制器的推视图控制器和解雇的爆裂人们如何连贯,优雅的处理呢?
什么案件的共同点是不是原来的视图控制器的外观,但所提出的/推视图控制器的消失。因此,一个简单的和澄清的溶液似乎是一个协议 - 和 - 代表架构。声明一对协议,如下:
protocol Home : class {
func comingHome()
}
protocol Away : class {
var home : Home? {get set}
}
extension Away where Self : UIViewController {
func notifyComingHome() {
if self.isBeingDismissed || self.isMovingFromParent {
self.home?.comingHome()
}
}
}
home
时提出或推动它self
。viewWillDisappear
如下:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.notifyComingHome()
}
这适用于在问题中列出的四种情况。可惜的是,虽然,可可触摸没有自动为您做到这一点。