Storyboard的使用以及使用多个Storyboard的方法
一, storyboard用起来很是方便。在开发中很有可能是多个人创建了多个storyboard。但最后,总是要把所有的storyboard“合并”在一起。总结一下自己的想法,不知道有没有其他的方式“合并”。
创建一个使用storyboard和ARC的single view application工程。然后common + N -> User Interface -> Storyboard,将这个storyboard命名为SecondStoryboard。那么现在工程内文件如下图所示:
MainStoryboard的布局如下所示:ViewController中有一个button,关联方法btnPressed
SecondStoryboard中的布局如下所示:viewController的背景色是红色,用以区别。
这里还需要做的一件事情是在secondstoryboard的viewcontroller中,将其identifier设置为firstVC.
接下来,完成btnPressed方法
- (IBAction)btnPressed:(id)sender {
UIStoryboard *secondStoryboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil];
UIViewController *firstVC = [secondStoryboard instantiateViewControllerWithIdentifier:@"firstVC"];
[self.navigationController pushViewController:firstVC animated:YES];
}
storyboard还有一个实例方法 -
(id)instantiateInitialViewController;这个方法也可以初始化firstVC,之所以没有用,是因为在
MainStoryboard中已经有一个NavigationController,不能在一个navigationcontroller里包含另外一
个navigationcontroller!!
这样,运行之后,点击按钮就会push到红色的view controller。
storyboard是在ios5中引入的新控件,能够更加清晰、简单的整合多个ViewController的关系
- 首先利用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的使用以及使用多个Storyboard的方法的更多相关文章
- [Swift]LaunchScreen.storyboard如何跳转到到Main.storyboard
在加载App时,首先读取[LaunchScreen.storyboard]中的内容, 在App加载到内存之后,自动读取[Main.storyboard]中的初始视图控制器, 用于替换原来的[Launc ...
- iOS开发手记 - iOS9.3 UINavigationController添加后不显示storyboard中viewcontroller里的控件的解决方法
我原先是这么做的,通常也是这么做 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSD ...
- IOS开发之获取Storyboard创建的ViewController
前面的两篇博客都是学习有关屏幕适配也就是相对布局的东西,这篇博客中将会学习视图间的切换.视图间的切换我们可以用代码完成或者用storyboard来建立各个视图控制器间的关系.在需要用到代码进行切换时会 ...
- UWP开发入门(二十二)——Storyboard和Animation
微博上有同学问我MyerSplash是如何实现那个很炫的图片点亮,然后移动到屏幕中央的效果.惭愧啊,我又不是作者哪里会知道.硬着头皮去GitHub拜读了高手的代码,自愧弗如,比我不知道高到哪里去了…… ...
- iOS 为iPhone和iPad创建不同的storyboard
复制Main.storyboard,重命名为Main_iPad.storyboard 在info.plist文件中添加 Main storyboard file base name (iPad) -- ...
- IOS开发中UI编写方式——code vs. xib vs.StoryBoard
最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面.iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关 ...
- iOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用
一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPicke ...
- storyboard在ios模拟器无法显示的问题
一.问题描述 1.在原有项目新建一个名称为test的storyboard类型的文件. 2.test.storyboard添加View Controller,并设置View Controller下Vie ...
- iOS学习33之可视化编程-StoryBoard
1. storyBoard与xib 1> 概述 iOS下可视化编程分为两种方式: xib 和 storyboard 在使用 xib 和 storyboard 创建 GUI 过程中,以 XML 文 ...
随机推荐
- JAVA类与对象作业——动手动脑以及课后实验性问题
一: 1.源代码 //MAO2015.10.6 //foo class Foo { int value; public Foo(int initValue) { value = initValue; ...
- python中read、readline和readlines
f = file('test.txt' , 'r') all_data = f.read() # 字符串类型 f.read(8) #读取固定大小的 ...
- JavaScript实现五子棋的界面设计
五子棋的界面设计包括绘制棋盘.绘制棋子及黑白棋轮流落子. 涉及的知识点主要有canvas绘制直线.设置画笔颜色:canvas画圆.填充渐变色 1.绘制棋盘 先设定棋盘的宽.高:然后利用for循环,根据 ...
- hdu 2473 Junk-Mail Filter (并查集之点的删除)
Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 学习manacher(最长公共回文串算法)
给定一个字符串求出其中最长个公共回文串. 举列子: abab -->回文串长度为2 以前的算法诸如: 扩展kmp求法过于麻烦,看到有一篇博文(http://leetcode.com/2011 ...
- (转载整理)SAP ERP常用T-CODE
其实最讨厌做ERP的项目了.不过,身不由己的嘛! 网上资料加一些整理. 与客户相关 VD01 建立客户 Create customerVD02 更改客户 Change customerVD03 显示 ...
- 使用 HTML5 canvas 绘制精美的图形
HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HT ...
- PHP可变长函数方法介绍
1.三个重要函数 func_num_args() 返回实参个数 func_get_arg(i) 返回某个实参的值 func_get_args() 以数组的形式返回实参 ...
- oracle常见权限分配
1.GRANT 赋于权限 常用的系统权限集合有以下三个: CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理) 常用的数据对象权限有以下五个: ALL ON 数据对象名 ...
- php不解析的排查步骤
php不解析的排查步骤:1. /usr/local/apache2/bin/apachectl -M 看一下有没有加载libphp5.so2. 查看配置文件中是否有 AddType applicati ...