随着项目的业务逻辑愈来愈复杂,随着项目愈来愈大,那么咱们Storybard中得控制器就愈来愈多, 就愈来愈难以维护。然而使用Storyborad又能更方便的帮助咱们作屏幕适配(PS:尤为在六、6+出来后)。优化
咱们能够将复杂的问题简单化,经过建立多个Storyboard分别管理不一样的模块的方式来优化代码,分红两步:好处:多个Storyboard能够分开管理,一我的负责一起,提交代码时不冲突;逻辑简单,方便屏幕适配spa
废话很少说直接上核心代码:此处有4个Stroyboard(Home、Message、Discover、Profile),每一个Storyboard中都是initial对应的是导航控制器,导航控制器的根控制器是UIViewControllercode
// 1.建立Window self.window = [[UIWindow alloc] initWithFrame:ACScreenBounds]; self.window.backgroundColor = [UIColor whiteColor]; // 2.建立TabBarCongtroller UITabBarController *tb = [[UITabBarController alloc] init]; // 3.加载4个Storyboard UIStoryboard *homeSB =[UIStoryboard storyboardWithName:@"Home" bundle:nil]; UIStoryboard *messageSB =[UIStoryboard storyboardWithName:@"Message" bundle:nil]; UIStoryboard *discoverSB =[UIStoryboard storyboardWithName:@"Discover" bundle:nil]; UIStoryboard *profileSB =[UIStoryboard storyboardWithName:@"Profile" bundle:nil]; //3.5 设置tabBarItem UINavigationController *homeNav = [homeSB instantiateInitialViewController]; UIViewController *homeVc = homeNav.topViewController; homeVc.title = @"首页"; UINavigationController *messageNav = [messageSB instantiateInitialViewController]; UIViewController *messageVc = messageNav.topViewController; messageVc.tabBarItem.title = @"消息"; messageVc.tabBarItem.image = [UIImage imageNamed:@"1"]; // 4.建立并将4个Storyboard添加到TabBarCongtroller中 tb.viewControllers = @[homeNav, messageNav, discoverSB.instantiateInitialViewController, profileSB.instantiateInitialViewController ]; // 5.设置根控制器 self.window.rootViewController = tb; // 6.显示Window [self.window makeKeyAndVisible];
/*继承
此外还应注意不能这样设置: UIViewController *homeVc = [homeSB instantiateViewControllerWithIdentifier:@"home"]; homeVc.title = @"首页"; tb.viewControllers = @[homeSB.instantiateInitialViewController]; 由于homeVc和 [homeSB instantiateInitialViewController].topViewController 指向的不是同一片内存地址,所以设置不会生效。
*/内存
以上就是一个tabBarController来管理多个Storyboard的方法。还能够把上面的建立tabBarController封装到一个自定义的UITabBarController中,达到优化的效果,将代码放到它改存在的位置。由于这些子控制器是归根控制器来管理的Application根本不关心子控制器如何操做,因此子控制器应该封装在跟控制器中,子控制器的内容只让根控制器决定。it
事例图:io