performSegueWithIdentifier 不生效的解决办法

相信很多人都会遇到这样的需求:

APP 打开以后,判断用户是否登录,如果未登录,就跳转到登陆页。

今天我也遇到了这个需求,发现我封装的一个 `func checkLoginStatus()` 放在 `viewDidLoad` 里调用根本没反映,Google 了一圈,得到了解决办法:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)
    checkLoginStatus()
}

为什么?


iOS 视图控制对象的生命周期如下:

init-初始化程序

viewDidLoad-加载视图

viewWillAppear-UIViewController对象的视图即将加入窗口时调用;

viewDidApper-UIViewController对象的视图已经加入到窗口时调用;

viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;

viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;

viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;

viewDidUnload-当内存过低,释放一些不需要的视图时调用。


原因很简单:如果在 viewDidLoad 时就启动 Segue 的话,依然会被后来填充的视图覆盖,要是在视图载入完成以后的 viewDidAppear 中启动 Segue,就 OK 了!

 

 
 
原文地址:https://www.cnblogs.com/Cheetah-yang/p/4669905.html