检测视图控制器何时可见

时间:2017-03-05 02:51:09

标签: ios swift uinavigationcontroller viewcontroller uinavigationitem

情况

假设我在导航控制器中有2个视图控制器。在故事板中,它们看起来像:

NC - > VC1 - > VC2

NC:导航控制器

VC1:查看控制器一

VC2:查看控制器2

因此VC1是导航控制器的根视图控制器,VC1通过show segue连接到VC2。

必然会发生什么:

VC1每次打开时都必须调用一个函数(例如necessaryFunction())。它目前在viewDidLoad()中调用此函数。问题是,当用户按下VC2中的后退按钮(导航栏上的后退按钮)并且VC1现在正在显示时,不会调用viewDidLoad()。这意味着也不会调用necessaryFunction()

我在找什么:

我正在寻找一种方法来确保从VC2返回VC1时调用necessaryFunction()。我知道这可以通过委托来解决,但对于这么简单的事情来说这似乎过于复杂,当然还有另一种方法可以做到这一点。

也许我可以necessaryFunction()加入viewWillAppear(),但我认为这不会奏效。

顺便说一句:我在Swift中编码。

编辑:我发现这篇文章:iOS how to detect programmatically when top view controller is popped?,但它是针对Objective-C而不是swift。

1 个答案:

答案 0 :(得分:1)

  

这四种方法可以在视图控制器的外观回调中使用,以确定它是否正在

提交解雇添加已删除作为子视图控制器

@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 }

例如,视图控制器可以

通过在 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
    }


}