多个Storyboard的使用
创建一个Storyboard工程
storyboard是在ios5中引入的新控件,能够更加清晰、简单的整合多个ViewController的关系,下面主要介绍一下怎么初建一个storyboard的工程。有关storyboard的介绍在后面的文章中提到。
- 首先利用xcode4.2创建一个新项目,选择空工程:
![]()
2.填写项目名称和勾选使用ARC
![]()
3、注释掉AppDelegate中的以下代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// // Override point for customization after application launch.
// self.window.backgroundColor = [UIColor whiteColor];
// [self.window makeKeyAndVisible];
return YES;
}
4、添加storyboard控件,起名叫MainStoryBoard
![]()
5、添加MainStoryBoard到工程中
![]()
6.在MainStoryBoard中添加viewController控件
![]()
7、编译运行
![]()
下面以一个实际项目来,分上面三步来详细介绍一下storyboard的使用
第一步:创建UITabBarViewController、UINavgationController、UIViewController共同使用
最后实现的storyboard的效果是:
![]()
介绍一下上面的结构,其中tabBarController是storyboard的开始视图,见下图:
![]()
由tabBarController分出三个子视图,其中前两个子视图是navigationcontroller,一个是viecontroller。其中navigationcontroller中有相应的子viewcontroller。
下面开始实现上面的工程:
1)创建一个工程叫stroyboarddemo,选择空工程
![]()
创建好之后的截图:
![]()
2)添加一个storyboard
![]()
起名为:Storyboard,打开初创建的storyboard,可以看到什么也没有。
![]()
3)添加一个tabBarController
![]()
![]()
![]()
4)把storyboard添加到工程中。在NationalLibraryConteollerAppDelegate中添加下面的代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
UIStoryboard *stryBoard=[UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
self.window.rootViewController=[stryBoard instantiateInitialViewController];
return YES;
}
首先是获取到storyboard的引用,然后是找到跟controller。
5)编译运行代码。
![]()
6)下面把tabBarController的子视图换成navigationcontroller
打开soryboard,删除tabBarController的孩子。
![]()
然后添加两个navigationcontroller
![]()
navigationcontroller和tabBarController关联起来。
按住control建拖动鼠标,选择关联即可。
![]()
![]()
下面修改两个navigationcontroller跟controller的view的颜色。
![]()
7)在次编译运行。
![]()
![]()
8)在navigationcontroller中在添加孩子视图
我先添加了三个viewcontroller
![]()
然后他们分别与控制器相连,相连之前先在相应的父视图中添加一个下一页的按钮。
![]()
下面按钮和新添加的viewcontroller相联系
![]()
同样在添加其他的按钮。
![]()
9)运行
![]()
![]()
![]()
![]()
![]()
目前为止,我们还没有添加一行代码,即可实现一个相对比较复杂的控制器。虽然实现了一个比较复杂的控制器的框架,但是在实际项目中,每个视图中的数据可能是动态加载的,这时候我们需要和代码相关联。接下来我将介绍一下storyboard怎么和相应的代码相关联。
10)、添加相应viewcontroller的实体类FirstViewController
![]()
11)、把FirstViewController和相应的视图相关联
![]()
12)在FirstViewController中添加按钮的事件。
-(IBAction)onClickButton:(id)sender
{
NSLog(@"FirstViewController on click button");
}
并且和相应的按钮相关联。
13)运行,当点击绿色视图中的下一页的时候,出现日志:
![]()
因为按钮有两个事件,一个是执行上述方法,还有一个作用是压栈下一个视图进入控制器。其先后顺序是先执行方法在压栈。
第二步、xib和storyboard共同使用
我们常需要实现以下需求,首先是一个登录页面或者是注册页面。登录成功之后跳入到上面复杂的导航界面。下面详细介绍一下怎么实现一个xib实现的登录页面,跳转到storyboard的导航页面。
1)先创建一个登录页面LoginViewController
![]()
2)修改NationalLibraryConteollerAppDelegate,先进入登录页面。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
LoginViewController *loginViewController=[[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
// UIStoryboard *stryBoard=[UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
self.window.rootViewController=loginViewController;//[stryBoard instantiateInitialViewController];
return YES;
}
3)运行即可。
![]()
4)在xib中,添加登录按钮。
![]()
5)添加登录按钮相应的事件
-(IBAction)onClickButton:(id)sender
{
}
6)xib和按钮事件相关联
![]()
7)按钮事件和上面的复杂控制器相关联
-(IBAction)onClickButton:(id)sender
{
UIStoryboard *stryBoard=[UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
self.view.window.rootViewController=[stryBoard instantiateInitialViewController];
}
8)运行
![]()
![]()
第三步是多个storyboard共同使用
多人合作或者项目有一定的复杂度,使用一个storyboard,肯定使storyboard复杂,我们可以根据需求把复杂的逻辑拆分成若干个storyboard。
1)我们在上面的基础上在添加一个tabBarController的孩子
![]()
2)添加一个ManagerViewController
![]()
3)、新添加的ManagerViewController和相应的控制器相关联
![]()
4)在视图中添加按钮
![]()
5)在ManagerViewController中添加按钮事件
-(IBAction)onClickButton:(id)sender
{
}
6)按钮事件和视图按钮相关联
![]()
7)添加一个新的storyboard,叫做second
![]()
8)添加导航器
![]()
9)在ManagerViewController的按钮事件中导航进入second即可
-(IBAction)onClickButton:(id)sender
{
UIStoryboard *stryBoard=[UIStoryboard storyboardWithName:@"second" bundle:nil];
[self presentModalViewController:[stryBoard instantiateInitialViewController] animated:YES];
}
10)运行
![]()
![]()
![]()
![]()
![]()
上面就是使用storyboard实现一个相对比较复杂的项目。
多个Storyboard的使用的更多相关文章
- LaunchScreen.storyboard启动图遇到的坑
Xcode有时候在LaunchScreen.storyBoard中修改了启动图片之后,运行却没有效果,直接白屏,而往storyboard中拖插件是可以显示的,设置成Assets.xcassets中的其 ...
- iOS系列 基础篇 02 StoryBoard 故事板文件
iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...
- Xcode6新特性(1)-删除Main.storyboard
当新建完一个空项目的时候,Xcode会自动创建一个Main.storyboard的空文件,如果不需要,可以将其删除.但是如果删除,再次运行程序,程序会报错,提示找不到Main.storyboard文件 ...
- Storyboard & XIB 自己的理解
//1.storyboard //(1) //此处bundle:nil 等价于 [NSBundle mainBundle] // SecondViewController *secondVc = ...
- 控制Storyboard播放zz
<Grid Width="300" Height="460"> <Grid.RowDefinitions> <RowDefinit ...
- 代码中使用StoryBoard和DoubleAnimation的方法
TranslateTransformを対象に.DoubleAnimation型のアニメーションを使用して.TranslateTransform.Xプロパティを ”-1 * Imageコントロールの幅” ...
- iOS开发之使用Storyboard预览UI在不同屏幕上的运行效果
在公司做项目一直使用Storyboard,虽然有时会遇到团队合作的Storyboard冲突问题,但是对于Storyboard开发效率之高还是比较划算的.在之前的博客中也提到过,团队合作使用Storyb ...
- IOS开发之获取Storyboard创建的ViewController
前面的两篇博客都是学习有关屏幕适配也就是相对布局的东西,这篇博客中将会学习视图间的切换.视图间的切换我们可以用代码完成或者用storyboard来建立各个视图控制器间的关系.在需要用到代码进行切换时会 ...
- UWP开发入门(二十二)——Storyboard和Animation
微博上有同学问我MyerSplash是如何实现那个很炫的图片点亮,然后移动到屏幕中央的效果.惭愧啊,我又不是作者哪里会知道.硬着头皮去GitHub拜读了高手的代码,自愧弗如,比我不知道高到哪里去了…… ...
- iOS 疑难杂症 — — 在 Storyboard 里 Add Size Class Customization 后再从代码里无法修改的问题
前言 公司的产品同时适配 iPhone 和 iPad ,并坚持用 Storyboard 来做适配,今天又踩一个坑(以前遇到过)还以为是 XCode 的鬼毛病. 声明 欢迎转载,但请保留文章原始出处: ...
随机推荐
- ActiveReports 9实战教程(3): 图文并茂的报表形式
基于上面2节内容,我们搭建了AR9的开发环境,配置好了数据源.在本节,我们以官方提供的3个中文图文并茂的报表来展示AR9的功能,并通过实战的方式一一分享. 以往做报表相关的工作时,最害怕的是报表的UI ...
- AngularJS快速入门指南09:SQL
我们可以将之前章节中的代码用来从数据库中读取数据. 通过PHP Server从MySQL数据库中获取数据 <div ng-app="myApp" ng-controller= ...
- LBS定位技术
http://www.cnblogs.com/LBSer/p/3295642.html LBS定位技术从方法上可分成三类:基于三角关系的定位技术.基于场景分析的定位技术.基于临近关系的定位技术(唐毅和 ...
- 1119 网页布局,css写下拉列表
<style type="text/css"> *{ margin:0px; padding:0px;} #body{ width:1000px; height:200 ...
- 推荐 greenrobot eventbus,简化安卓开发,提高安卓维护性,优化安卓性能
最近在研究移动开发,广泛的阅读有关cordova,apicloud,android资料.发现安卓的开发还是很简单的.再发现greenrobot eventbus开源框架不仅可以简化安卓开发,有可以大幅 ...
- Atitit.实现继承的原理and方法java javascript .net c# php ...
Atitit.实现继承的原理and方法java javascript .net c# php ... 1. 实现继承的问题 1 2. 如何拷贝基类方法?采用prototype原型方式,通过冒充对象 1 ...
- Mac OS X 系统下自带的文本文件格式转换工具iconv
1. utf-8 转 GBK的方法 在mac bash 中直接运行 iconv -f UTF-8 -t GBK test_utf8.txt > test_gbk.txt 举例:创建测试文件 ec ...
- Mac 安装 home Brew以及 XCTool的过程记录
一.HomeBrew相关: 先对HomeBrew做一个简单的介绍吧,之前了解的也不多. 主要就是用于安装Unix的工具包. 注意:HomeBrew依赖于Xcode的 Command Line Tool ...
- jQuery 之父:每天写代码
去年秋天我的支线代码项目 遇到了一些问题,项目进展不足,而且我没法找到一个完成更多代码的方法(在不影响我在Khan Academy方面的工作的前提下). 我主要在周末进行我的支线,当然有时候也在晚上进 ...
- 远哥教你MuleESB系列视频教程
远哥教你MuleESB系列视频课程介绍(共11个视频) 1.Mule ESB介绍 2.社区版/企业版的区别和安装 3.MuleESB快速入门,以及MEL和Message结构 4.官方例子讲解( ...