检测何时可见视图控制器



情况

假设我在导航控制器内有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
    }

}

最新更新