iOS 开发中手动 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 了!


0 0