Storyboard 模块化(1)

背景:

之前的项目一直不敢使用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
{
}


点击黄色按钮(Service VC),Ctrl + Drag 到 红色的Exit,并选择在目标VC中实现的unwindForSegue:


修改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!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值