原文地址: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
//{
//
//}