iOS Swift 如何监控 UIViewController 生命周期

Posted

技术标签:

【中文标题】iOS Swift 如何监控 UIViewController 生命周期【英文标题】:iOS Swift how to monitor UIViewController lifecyle 【发布时间】:2016-07-13 23:02:06 【问题描述】:

我是 ios 开发新手。如果这是非常基本的事情,请原谅我。

从我学到的东西到现在:

UIViewController 类在某种程度上类似于 android 中的 Activity 类。

viewDidLoad/viewWillAppear方法到onCreate/onStart方法

viewDidAppear 方法到onResume 方法

如果我在这里错了,请纠正我。

现在,在 Android 中,我们可以通过实现 Interface (ActivityLifecycleCallbacks)(有点类似于 iOS 中的协议)来监控这些方法(包括其他生命周期方法)中的哪些被触发/调用,它存在于 @任何 Activity 中的 987654330@ 类(尤其是在扩展 Application 类的类中)。

这意味着现在只要在 Android 应用中从一个屏幕导航到另一个屏幕,就会触发/调用这些方法。

我如何在 iOS 中使用 Swift 做到这一点?我如何知道用户当前在哪个屏幕(UIViewcontroller)以及他在哪里导航?

简而言之,我想编写一个独立的类来记录用户当前所在的屏幕(UIViewController)以及正在执行哪个生命周期方法(viewDidLoad、viewWillAppear 等)?

请有人帮帮我。

编辑:- 我不希望他们继承我的独立类而不是 UIViewController 类。

【问题讨论】:

【参考方案1】:

在调用 UIViewController 生命周期方法时不会触发全局事件。要创建这些,您需要按照建议将 UIViewController 子类化。

您可以查看UIApplication.sharedApplication().keyWindow?.rootViewController 以获取当前的根视图控制器(通常但不总是当前活动的视图控制器)。

您通常不会设计一个依赖于跟踪视图控制器状态的中心对象的应用程序。

class reference 中很好地描述了 UIViewController 方法的流程,您也可以从函数名称中计算出来 -

viewDidLoad 在视图控制器实例加载后调用(每次实例化一次) viewWillAppear 调用之前这个视图出现 viewDidAppear 调用这个视图出现 viewWillDisappear 调用之前此视图消失 viewDidDisappear 调用 这个视图消失了

【讨论】:

我去看看 “导航发生时没有触发全局事件”。确实。但如果您使用的是UINavigationController 实例,则可以实现其委托协议并观察导航事件。 嗯,是的,但问题是关于 UIViewController 生命周期。也许我对“导航”这个词的使用有点令人困惑。即使是UINavigationControllerDelegate 方法也不会在调用特定视图控制器生命周期函数时提供通知【参考方案2】:

创建一个视图控制器子类并在其中添加该实现。然后确保您创建的所有视图控制器都是该新类而不是 UIViewController 本身的子类

【讨论】:

感谢您的回复,但我正在尝试寻找另一种方法来做到这一点,而无需让他们继承我的自定义类。有什么想法吗? 我只是觉得可以从 AppDelegate 类中完成一些事情,但我真的无法弄清楚。 @OneStepBack 从 AppDelegate 是不可能的

以上是关于iOS Swift 如何监控 UIViewController 生命周期的主要内容,如果未能解决你的问题,请参考以下文章

将 segued 数据存储在单独的视图控制器上(swift 4)

Swift - 单击按钮更改 UIPageViewController 视图

函数没有返回,Swift Firebase

检测 iPad 的方向 - Swift Playgrounds

swift 3中的错误UIScrollView

无法使用 swift 在 Facebook 上发布 QR 码图像