使用单个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. Scrapy框架

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以 ...

  2. java.lang.SecurityException: Prohibited package name:

    Prohibited package name:禁止使用的包名! 改个包名即可,全是这种bug多好啊.

  3. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  4. 剑指架构师系列-spring boot的logback日志记录

    Spring Boot集成了Logback日志系统. Logback的核心对象主要有3个:Logger.Appender.Layout 1.Logback Logger:日志的记录器 主要用于存放日志 ...

  5. markdowm写博客测试

    markdowm测试文档 #include <bits/stdc++.h> using namespace std; int main() { printf("Hello Wor ...

  6. /usr,/usr/local/ 还是 /opt ?

    Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的(好吧处女座表示完全不能接受不正确的路径选择,看着会不舒服的……) /usr:系统级的目录,可以理解为C:/Windows/, ...

  7. Linux(十七)动态监控进程

    17.1 介绍 top与ps命令很相似.它们都用来显示正在执行的进程.top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程 17.2 语法 top    [选项] 常用选项   ...

  8. 深度解读GoogleNet之Inception V1

    GoogleNet设计的目的 GoogleNet设计的初衷是为了提高在网络里面的计算资源的利用率. Motivation 网络越大,意味着网络的参数较多,尤其当数据集很小的时候,网络更容易发生过拟合. ...

  9. linux系统性能监控--CPU利用率

    在对系统的方法化分析中,首要且最基本的工具之一常常是对系统的 CPU利用率进行简单测量. Linux以及大多数基于 UNIX的操作系统都提供了一条命令来显示系统的平均负荷(loadaverage) . ...

  10. 干货:MySQL 索引原理及慢查询优化

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修 ...