隨着項目的業務邏輯愈來愈複雜,隨着項目愈來愈大,那麼咱們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