背景:
之前的项目一直不敢使用Storyboard,原因在于听到Storyboard的负面新闻太多了,如不能在IB上定制多个按钮的NavigationBar,日渐庞大的Storyboard造成无法团队多人共同修改,代码合并时的冲突也让人心寒。
XCode面世后,Storyboard焕然一新,其中最让人心动得数Storyboard Reference了。可是,还没高兴半天就被泼了冷水 - Storyboard Reference只能在IOS9以上系统使用,就是说APP最低支持版本要调整成IOS9。我们在IOS7.X, IOS8.X上有着大量用户,不可能轻言放弃。
所以有了这一讲,Storyboard 模块化
1、Storyboard 模块化
为了尽可能地避免代码合并冲突,按模块创建多个Storyboard。如根视图控制器为UITabbarController,可将其下的N个ViewController放到独立的Storyboard中。由于不能使用Storyboard Reference,我们使用代码来完成基本框架的创建
UIViewController *vc1 = [UIViewController alloc] init];
UIViewController *vc2 = [UIViewController alloc] init];
UIViewController *vc3 = [UIViewController alloc] init];
UIViewController *vc4 = [UIViewController alloc] init];
tabbarController.viewControllers = @[vc1, vc2, vc3, vc4];
2、创建Storyboard
3、实现Storyboard交互
- (IBAction)showHomepage:(UIBarButtonItem *)sender {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Homepage" bundle:nil];
UIViewController *homepage = [sb instantiateInitialViewController];
[self presentViewController:homepage animated:YES completion:NULL];
}
4、代码实现 Unwind Segue
目标VC中实现
- (IBAction)unwindForSegue:(UIStoryboardSegue *)unwindSegue
{
}
修改Identifier为showRoot
为中间按钮showRoot创建动作
- (IBAction)showRoot:(UIButton *)sender {
[self performSegueWithIdentifier:@"showRoot" sender:self];
}
5、总结
到此,已经实现了多个Storyboard间的正向Segue及反向Unsegue。以下两种弹出方式已经验证过可以通过上述方式实现Unwind Segue,Popover 或者 自定义的Segue还有待验证
presentViewController:
<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">pushViewController:</span>
Thanks for Stackoverflow!