一个显示在window上的view在VC的viewDidLoad中不显示记录

来源:互联网 发布:淘宝话费没充上不能退 编辑:程序博客网 时间:2024/05/22 02:11

今天在写程序的时候,遇到这么一个问题:

问题描述:写了一个AlertView控件,window做为显示这个View的容器,现在控件已经全部写好了,在测试的时候我是这么写的,代码如下:

- (void)viewDidLoad {    [super viewDidLoad];    self.view.backgroundColor = [UIColor yellowColor];    [UCARProgressManager showMessageUseAlert:@"OK" animated:YES];}    

封装的就是这么6,其中在 UCARProgressManager showMessageUseAlert方法里是把alertView直接加到keyWindow上。这个时候问题来了,发现我这个包装好的AlertView并没有在运行时显示出来。带着这个疑问,在网上找到一个被转爆的文章:http://stephen830.iteye.com/blog/2253551。其实这里遇到的问题和这个基本上是一样的,追根溯源还是自己对view显示的基本概念不清楚尴尬

看完上面的帖子大致明白了,可是总觉得缺点什么,下面是我的总结:

1、viewDidLoad方法是我们初始化一个VC的时候调用且仅仅调用一次,它的作用是去初始化数据(脑补MVC),初始化本VC中视图的大小和内容等等,注意,不显示视图;

2、viewWillAppear方法:因为ViewDidLoad只是第一次调用VC的时候被调用且仅仅一次,所以如果我们的视图被覆盖或者改变展示数据的时候就要用这个方法,理解为初始化数据也是可以的,注意仍然不展示视图。注意:到目前为止,你可以调用self.view.window,会发现window为nil;

3、viewDidAppear:调用这个的时候视图才展示了出来,这个时候self.view.window属性不为nil了,就可以显示我们的视图了。其实我们只要记住,只有将view展示在window上我们才能看到这个view,所以如果我们在window出现之前想去展示一个依赖于window的视图,那是不可能的,例如:写在viewDidLoad中。

我知道看完你一定还有疑问:“我明明在viewDidLoad中初始化了我的view并且显示了啊”.。我推介你在viewDidLoad中看看你的keyWindow是否为nil。

同样,如果按照VC的生命周期来说,那视图将消失的时候,我们知道该干什么了吧!


阅读全文
0 0
原创粉丝点击