【发布时间】:2017-07-25 01:00:15
【问题描述】:
情况
假设我在导航控制器中有 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。
【问题讨论】:
-
“但我认为这行不通。”你没有?当您尝试时发生了什么?
-
当我尝试它时,与在
viewDidLoad()内部调用necessaryFunction()时没有任何变化 -
但是
viewWillAppear是在你弹回VC1时调用的,那为什么不能解决问题呢?如果不是,那么您一定是错误地描述了问题。 -
你表达了两个主要的误解。 (1) View controllers 是 UIViewControllers,因此,不可见! (另一方面,UIView 是。)听起来您还没有掌握 MVC 的一些基础知识。 (2) 我看到的下一个 - 也是更大的 - 误解是关于视图、它们的控制器和每个都有的生命周期。搜索其中一些术语 - 您应该知道 viewWillAppear() 将被调用,而 viewDidLoad() 可能不会。
标签: ios swift uinavigationcontroller viewcontroller uinavigationitem