情况
假设我在导航控制器内有2个视图控制器。在故事板内,它们看起来像:
nc-> vc1-> vc2
NC:导航控制器
vc1:查看控制器一个
vc2:查看控制器2
SO VC1是导航控制器的根视图控制器,VC1通过show segue连接到VC2。
必须发生什么:
vc1每次打开时都必须调用功能,例如necessaryFunction()
)。它目前在viewDidLoad()
中调用此功能。问题在于,当用户按VC2中的后退按钮(导航栏上的一个)和VC1现在显示时,viewDidLoad()
未调用。这意味着necessaryFunction()
也不会被调用。
我正在寻找的内容:
我正在寻找一种方法来确保从VC2返回VC1时调用necessaryFunction()
。我知道这可以通过代表解决,但是对于如此简单的事情来说,这似乎太复杂了,肯定还有另一种方法可以做到这一点。
也许我可以将necessaryFunction()
放入viewWillAppear()
中,但我认为这会起作用。
顺便说一句:我正在Swift中编码。
编辑:我找到了这篇文章:iOS如何在弹出顶部视图控制器时如何以编程方式检测?
这四种方法可在视图控制器的外观回调中使用,以确定它是否为
提出,解雇,或添加或> 删除作为子>子女视图控制器。
@available(iOS 5.0, *)
open var isBeingPresented: Bool { get }
@available(iOS 5.0, *)
open var isBeingDismissed: Bool { get }
@available(iOS 5.0, *)
open var isMovingToParentViewController: Bool { get }
@available(iOS 5.0, *)
open var isMovingFromParentViewController: Bool { get }
例如,视图控制器可以
检查它是否消失了,因为它被解散了>或 popped ,通过在其 viewWillDisappear 中询问>:/p>
通过检查表达式
的方法([self isBeingDismissed] || [self isMovingFromParentViewController]).
对于例如,您可以将该方法称为
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if (self.isMovingFromParentViewController()) {
// we're already on the navigation stack
// another controller must have been popped off
}
}