检测视图控制器何时可见
Detecting when a view controller is visible
情况
假设我在导航控制器中有 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.
中编码
编辑: 我发现了这个 post:iOS how to detect programmatically when top view controller is popped?,但它适用于 objective-C,而不是 swift。
These four methods can be used in a view controller's appearance callbacks to determine if it is being
提交、取消,或添加或删除 作为 子视图控制器 。
@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 }
例如,视图控制器可以
检查它是否正在消失 因为它被 dismissed 或 popped 询问自己它的 viewWillDisappear:
方法通过检查表达式
([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
}
}
情况
假设我在导航控制器中有 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.
中编码编辑: 我发现了这个 post:iOS how to detect programmatically when top view controller is popped?,但它适用于 objective-C,而不是 swift。
These four methods can be used in a view controller's appearance callbacks to determine if it is being
提交、取消,或添加或删除 作为 子视图控制器 。
@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 }
例如,视图控制器可以
检查它是否正在消失 因为它被 dismissed 或 popped 询问自己它的 viewWillDisappear:
方法通过检查表达式
([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
}
}