使用单个storyboard会使得项目难与管理,使用纯代码又会过于麻烦,因此如果能将二者结合起来,并且使用多个storyboard,会使得项目简单简单、方便许多。

下面以一个简单的视图关系为例,介绍多个storyboard的用法。

①有page1和page2两个页面,点击page1的Detail按钮会弹出page1Detail视图,点击page1Detail的返回按钮又会返回。

②page1和page2通过tabbar切换。

我们创建page1、page2、page1Detail三个storyboard,每个有自己的控制器,注意设置每个控制器为initial ViewController,否则在加载storyboard的控制器时会崩溃。

【具体步骤】

①删除工程设置中Main Interface的默认设置,因为要用tabbar连接两个控制器,应当通过代码实现。

②在AppDelegate中创建window,创建tabbar,把window的rootViewController设置为tabbar。

加载storyboard,从storyboard拿到默认控制器,然后设置tabbar的viewControllers为page1、page2,最后不要忘了调用window的makeKeyAndVisible方法。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    self.window.backgroundColor = [UIColor whiteColor];

    UITabBarController *tb = [[UITabBarController alloc] init];

    // 加载storyboard
UIStoryboard *page1Sb = [UIStoryboard storyboardWithName:@"page1" bundle:nil];
UIStoryboard *page2Sb = [UIStoryboard storyboardWithName:@"page2" bundle:nil];
// 创建并添加到tabbar
tb.viewControllers = @[page1Sb.instantiateInitialViewController,page2Sb.instantiateInitialViewController]; self.window.rootViewController = tb; [self.window makeKeyAndVisible]; return YES;
}

通过这样设置,就可实现tabbar包着page1、page2两个控制器。

③在page1中点击Detail按钮时modal一个detail控制器,同样是通过加载storyboard、获取默认控制器、调用presentViewController:::方法modal这个控制器。

- (IBAction)detailClick:(id)sender {

    // 加载storyboard
UIStoryboard *detailSb = [UIStoryboard storyboardWithName:@"page1Detail" bundle:nil];
// 创建控制器
UIViewController *vc = detailSb.instantiateInitialViewController;
[self presentViewController:vc animated:YES completion:nil]; }

④modal的控制器的返回通过dismiss实现。

- (IBAction)backClick:(id)sender {

    [self dismissViewControllerAnimated:YES completion:nil];

}

(九十)使用多个storyboard+代码实现控制器的分开管理的更多相关文章

  1. iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期

    iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期 一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在stor ...

  2. iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

    一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...

  3. IOS 模仿有storyboard的项目控制器的创建

    ● 先加载storyboard文件(Test是storyboard的文件名) UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@ ...

  4. 从StoryBoard加载控制器

    1.创建窗口self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];2.加载控制器从StoryBoard ...

  5. 在storyboard中给控制器添加导航栏控制器和标签控制器

    1.选中目标控制器 2.选择xcode的工具栏中的"Editor"->"Embed in"->"Navigation Controller ...

  6. ios手写代码添加控制器

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  7. iOS面试题05-父子控制器、内存管理

    内存管理.父子控制器面试题 1.建立父子关系控制器有什么用 回答:1>监听屏幕选中 2>如果想拿到你当前的很小的一个控制器所在的导航控制器必须要跟外面比较大的控制器建立父子关系,才能一层一 ...

  8. 第四章vs2107 代码实际运用-后台权限管理讲解 创建角色

    先看一下项目整体结构图: 实体类和数据操作都在前面用TT模板批量生产了.下面开始介绍权限代码这块的逻辑. 创建角色开始. 1. 角色的创建我们用到三张表 A.menuinfo(菜单表)  role(角 ...

  9. 跟bWAPP学WEB安全(PHP代码)--认证绕过与会话管理

    背景 这里主要是代码逻辑问题,而不是代码使用函数的问题,因此在这个里面就不粘贴具体代码了,而是分类介绍下bWAPP中涉及的安全问题: 验证码问题 找回问题 账号口令问题 Cookies问题 Sessi ...

随机推荐

  1. I/O控制的主要功能

    主要功能: 1.  解释用户的I/O系统调用.将用户I/O系统调用转换为I/O控制模块认识的命令模式. 2.  设备驱动.根据得到的I/O命令,启动物理设备完成指定的I/O操作. 3.  中断处理.对 ...

  2. c语言第二次作业2

    ---恢复内容开始--- (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. 源程序 对源程序进行编译 错误信息1: 错误原因:stdio.h输入错误 改正方法:i和d互换位置 错误信息2: ...

  3. ionic 禁用 手势 滑动返回

    $ionicConfigProvider.views.swipeBackEnabled(false); 在 应用的 config里面 配置下 上面的那句话 就OK了.

  4. 地址四级联动的vue组件

    一.效果图如下: 二.思路 主要在vue中结合 mint-ui组件的Picker和Popup方法,负责对json地址进行展示: 三.代码地址 四.说明 address4.json最好是在点击父组件的地 ...

  5. virtualenvwrapper 的安装和使用

    virtualenvwrapper是用来管理virtualenv的扩展包,用着很方便. 1. 安装: #安装virtualenv (sudo) pip install virtualenv #安装vi ...

  6. south 命令学习

    south 命令学习 概述 在django某个版本之前,django自身提供一个创建数据库的命令-syncdb,它会根据model来创建相应的表,但是这个命令不好的地方在于,如果想要对model进行更 ...

  7. SpringMVC格式转化错误之HTTP Status [400] – [Bad Request]

    SpringMVC中,如果直接为Date类型的属性赋值,服务器有可能会报HTTP Status [400] – [Bad Request] Type Status Report Description ...

  8. spring-boot配置静态资源映射的坑:properties文件不能添加注释

    如此博文所述,Spring Boot 对静态资源映射提供了默认配置 默认将 /** 所有访问映射到以下目录:classpath:/staticclasspath:/publicclasspath:/r ...

  9. python3+django2 开发易语言网络验证(上)

    创作背景: 在某论坛中下载到一套php开发易语言网络验证的教程,照着看下来,花了两天的时间,结果发现教程里开发的网络验证,以及随着教程一起给学员的源码,都存在着根本用不了的bug!我想要看看能不能在原 ...

  10. springMVC源码分析--HandlerMethodReturnValueHandlerComposite返回值解析器集合(二)

    在上一篇博客springMVC源码分析--HandlerMethodReturnValueHandler返回值解析器(一)我们介绍了返回值解析器HandlerMethodReturnValueHand ...