iOS 开发中手动 performSegueWithIdentifier 不生效的解决办法

2015-1-8   /   字数:679   /   阅读数:16583   /   分类: iOS & Swift     

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

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 了!

WRITTEN BY

avatar

评论:

seiko
2016-05-02 18:12
伸个大拇指,解决了问题,虽说用的 OC。
pengehan
2015-12-16 14:05
viewVillUnload和viewDidUnload已经废除了
marxwiggin
2015-07-03 22:14
- (void)viewWillAppear:(BOOL)animated
也行……
tracy
2015-04-28 21:32
学习。每天跟着你学,感觉真的很错。
JohnLui
2015-04-28 22:07
@tracy:是“很不错”吧~

发表评论:

© 2011-2024 岁寒  |  Powered by Emlog