创建一个Storyboard工程

storyboard是在ios5中引入的新控件,能够更加清晰、简单的整合多个ViewController的关系,下面主要介绍一下怎么初建一个storyboard的工程。有关storyboard的介绍在后面的文章中提到。

  1. 首先利用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的使用的更多相关文章

  1. LaunchScreen.storyboard启动图遇到的坑

    Xcode有时候在LaunchScreen.storyBoard中修改了启动图片之后,运行却没有效果,直接白屏,而往storyboard中拖插件是可以显示的,设置成Assets.xcassets中的其 ...

  2. iOS系列 基础篇 02 StoryBoard 故事板文件

    iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...

  3. Xcode6新特性(1)-删除Main.storyboard

    当新建完一个空项目的时候,Xcode会自动创建一个Main.storyboard的空文件,如果不需要,可以将其删除.但是如果删除,再次运行程序,程序会报错,提示找不到Main.storyboard文件 ...

  4. Storyboard & XIB 自己的理解

    //1.storyboard //(1) //此处bundle:nil 等价于 [NSBundle mainBundle] //    SecondViewController *secondVc = ...

  5. 控制Storyboard播放zz

    <Grid Width="300" Height="460"> <Grid.RowDefinitions> <RowDefinit ...

  6. 代码中使用StoryBoard和DoubleAnimation的方法

    TranslateTransformを対象に.DoubleAnimation型のアニメーションを使用して.TranslateTransform.Xプロパティを ”-1 * Imageコントロールの幅” ...

  7. iOS开发之使用Storyboard预览UI在不同屏幕上的运行效果

    在公司做项目一直使用Storyboard,虽然有时会遇到团队合作的Storyboard冲突问题,但是对于Storyboard开发效率之高还是比较划算的.在之前的博客中也提到过,团队合作使用Storyb ...

  8. IOS开发之获取Storyboard创建的ViewController

    前面的两篇博客都是学习有关屏幕适配也就是相对布局的东西,这篇博客中将会学习视图间的切换.视图间的切换我们可以用代码完成或者用storyboard来建立各个视图控制器间的关系.在需要用到代码进行切换时会 ...

  9. UWP开发入门(二十二)——Storyboard和Animation

    微博上有同学问我MyerSplash是如何实现那个很炫的图片点亮,然后移动到屏幕中央的效果.惭愧啊,我又不是作者哪里会知道.硬着头皮去GitHub拜读了高手的代码,自愧弗如,比我不知道高到哪里去了…… ...

  10. iOS 疑难杂症 — — 在 Storyboard 里 Add Size Class Customization 后再从代码里无法修改的问题

    前言 公司的产品同时适配 iPhone 和 iPad ,并坚持用 Storyboard 来做适配,今天又踩一个坑(以前遇到过)还以为是 XCode 的鬼毛病. 声明  欢迎转载,但请保留文章原始出处: ...

随机推荐

  1. OS——进程简答题(1)

    1,叙述进程和程序的主要区别. 解:进程和程序是两个既有联系又有区别的两个概念,它们的主要区别如下: (1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念.而进程是程序在处理机上的 ...

  2. 【Android Studio】Android Studio 安装及设置

    版权所有, 禁止转载, 如有需要, 请站内联系. 本文地址: http://blog.csdn.net/caroline_wendy/article/details/20845807 时间: 2014 ...

  3. C语言实现二叉树-利用二叉树统计单词数目

    昨天刚参加了腾讯2015年在线模拟考: 四道大题的第一题就是单词统计程序的设计思想: 为了记住这一天,我打算今天通过代码实现一下: 我将用到的核心数据结构是二叉树: (要是想了解简单二叉树的实现,可以 ...

  4. MyBatis crud操作

    Test2.java package com.mycom.mybatis_1.crud; import java.util.List; import org.apache.ibatis.session ...

  5. C#根据日期范围过滤IQueryable<T>集合

    需要扩展IQueryable<T>,参数包括一个DateTime类型的属性.开始日期.截止日期. public static class MyExtension { public stat ...

  6. 如何实现在H5里调起高德地图APP?(上)

    这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前往方式. 场景一.在高德地图上展示Marker点或者POI标记 在一些基于位置分享的应用开发 ...

  7. 动态变化的OO设计

    今天看到个题目:对象会动态的变化. 游戏精灵,有人和神仙,但是随着人的不断积分,会升级为神仙:神仙也可能会因为积分的减少而降级为人.这种情况怎么画出个类图来. 这是第一版的设计,正常思维.人和神仙都是 ...

  8. URLEncode与URLDecode总结与实现

    URLEncode: 用于编码URL字符串,数字和字母保持不变,空格变为'+',其他(如:中文字符)先转换为十六进制表示,然后在每个字节前面加一个标识符%,例如:“啊”字 Ascii的十六进制是0xB ...

  9. linux系统date命令详解

    Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟, ...

  10. TextEdit 回车事件

    <dxe:TextEdit Name="txtSearchPatientName" KeyDown="txtSearchPatientName_KeyDown_1& ...