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

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

问题描述:写了一个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的生命周期来说,那视图将消失的时候,我们知道该干什么了吧!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值