UITabbarController的子类,init 和 viewDidLoad 的顺序

原文地址:http://www.andrewmonshizadeh.com/2015/02/23/uitabbarcontroller-is-different/

今天新建了个 UITabBarController 的子类,从一个 Controller 用 present 的方式弹出 这个UITabBarController的子类Controller。奇怪的是 在该子类Controller里init方法的时候调用了 viewdidload,导致每次传值的时候都会在viewdidload加载完了之后传的值才能传过去。后来看了上面的帖子,UITabBarController在调用【super init】的时候,系统肯定调用了self.view的东西,但是此时view还没加载出来,于是系统强制先调用viewdidload去加载self.view,最后加载完了,再接着走init方法中的 if(self)条件语句。具体的文中也说道,其实UITabBarController在init的时候,会增UITabbar到self.view,这时候必须加载self.view出来,从而就调用了loadview,进而调用viewdidload、viewwillappear等。这个是UITabBarController的特性。

解决方案:就是不要在viewdidload和viewwillappear等方法里写加载界面的代码,可以单独再写个方法,直接在init结束的时候调用。所以我的建议就是直接把viewdidload和viewwillappear方法删了,加载界面全都在init里写,如下:

- (instancetype)init
{
    self = [super init];
    if (self) {
        //加载界面
    }
    return self;
}

//下面这俩方法直接屏蔽就可以了
//- (void)viewDidLoad
//{
//    [super viewDidLoad];
//    
//    
//}
//
//- (void)viewWillAppear:(BOOL)animated
//{
//    
//}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值