Storyboard的使用以及使用多个Storyboard的方法

时间:2022-09-30 23:34:32

一, storyboard用起来很是方便。在开发中很有可能是多个人创建了多个storyboard。但最后,总是要把所有的storyboard“合并”在一起。总结一下自己的想法,不知道有没有其他的方式“合并”。

创建一个使用storyboard和ARC的single view application工程。然后common + N -> User Interface -> Storyboard,将这个storyboard命名为SecondStoryboard。那么现在工程内文件如下图所示:

Storyboard的使用以及使用多个Storyboard的方法

MainStoryboard的布局如下所示:ViewController中有一个button,关联方法btnPressed

Storyboard的使用以及使用多个Storyboard的方法

SecondStoryboard中的布局如下所示:viewController的背景色是红色,用以区别。

Storyboard的使用以及使用多个Storyboard的方法

这里还需要做的一件事情是在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的关系

  1. 首先利用xcode4.2创建一个新项目,选择空工程:

Storyboard的使用以及使用多个Storyboard的方法

2.填写项目名称和勾选使用ARC

Storyboard的使用以及使用多个Storyboard的方法

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

Storyboard的使用以及使用多个Storyboard的方法

5、添加MainStoryBoard到工程中

Storyboard的使用以及使用多个Storyboard的方法

6.在MainStoryBoard中添加viewController控件

Storyboard的使用以及使用多个Storyboard的方法

7、编译运行

Storyboard的使用以及使用多个Storyboard的方法

下面以一个实际项目来,分上面三步来详细介绍一下storyboard的使用

第一步:创建UITabBarViewController、UINavgationController、UIViewController共同使用

最后实现的storyboard的效果是:

Storyboard的使用以及使用多个Storyboard的方法

介绍一下上面的结构,其中tabBarController是storyboard的开始视图,见下图:

Storyboard的使用以及使用多个Storyboard的方法

由tabBarController分出三个子视图,其中前两个子视图是navigationcontroller,一个是viecontroller。其中navigationcontroller中有相应的子viewcontroller。

下面开始实现上面的工程:

1)创建一个工程叫stroyboarddemo,选择空工程

Storyboard的使用以及使用多个Storyboard的方法

创建好之后的截图:

Storyboard的使用以及使用多个Storyboard的方法

2)添加一个storyboard

Storyboard的使用以及使用多个Storyboard的方法

起名为:Storyboard,打开初创建的storyboard,可以看到什么也没有。

Storyboard的使用以及使用多个Storyboard的方法

3)添加一个tabBarController

Storyboard的使用以及使用多个Storyboard的方法

Storyboard的使用以及使用多个Storyboard的方法

Storyboard的使用以及使用多个Storyboard的方法

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)编译运行代码。

Storyboard的使用以及使用多个Storyboard的方法

6)下面把tabBarController的子视图换成navigationcontroller

打开soryboard,删除tabBarController的孩子。

Storyboard的使用以及使用多个Storyboard的方法

然后添加两个navigationcontroller

Storyboard的使用以及使用多个Storyboard的方法

navigationcontroller和tabBarController关联起来。

按住control建拖动鼠标,选择关联即可。

Storyboard的使用以及使用多个Storyboard的方法

Storyboard的使用以及使用多个Storyboard的方法

下面修改两个navigationcontroller跟controller的view的颜色。

Storyboard的使用以及使用多个Storyboard的方法

7)在次编译运行。

Storyboard的使用以及使用多个Storyboard的方法Storyboard的使用以及使用多个Storyboard的方法

8)在navigationcontroller中在添加孩子视图

我先添加了三个viewcontroller

Storyboard的使用以及使用多个Storyboard的方法

然后他们分别与控制器相连,相连之前先在相应的父视图中添加一个下一页的按钮。

Storyboard的使用以及使用多个Storyboard的方法

下面按钮和新添加的viewcontroller相联系

Storyboard的使用以及使用多个Storyboard的方法

同样在添加其他的按钮。

Storyboard的使用以及使用多个Storyboard的方法

9)运行

Storyboard的使用以及使用多个Storyboard的方法Storyboard的使用以及使用多个Storyboard的方法

Storyboard的使用以及使用多个Storyboard的方法Storyboard的使用以及使用多个Storyboard的方法Storyboard的使用以及使用多个Storyboard的方法

目前为止,我们还没有添加一行代码,即可实现一个相对比较复杂的控制器。虽然实现了一个比较复杂的控制器的框架,但是在实际项目中,每个视图中的数据可能是动态加载的,这时候我们需要和代码相关联。接下来我将介绍一下storyboard怎么和相应的代码相关联。

10)、添加相应viewcontroller的实体类FirstViewController

Storyboard的使用以及使用多个Storyboard的方法

11)、把FirstViewController和相应的视图相关联

Storyboard的使用以及使用多个Storyboard的方法

12)在FirstViewController中添加按钮的事件。

-(IBAction)onClickButton:(id)sender 

    NSLog(@"FirstViewController on click button"); 
}

并且和相应的按钮相关联。

13)运行,当点击绿色视图中的下一页的时候,出现日志:

Storyboard的使用以及使用多个Storyboard的方法

因为按钮有两个事件,一个是执行上述方法,还有一个作用是压栈下一个视图进入控制器。其先后顺序是先执行方法在压栈。

第二步、xib和storyboard共同使用

我们常需要实现以下需求,首先是一个登录页面或者是注册页面。登录成功之后跳入到上面复杂的导航界面。下面详细介绍一下怎么实现一个xib实现的登录页面,跳转到storyboard的导航页面。

1)先创建一个登录页面LoginViewController

Storyboard的使用以及使用多个Storyboard的方法

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)运行即可。

Storyboard的使用以及使用多个Storyboard的方法

4)在xib中,添加登录按钮。

Storyboard的使用以及使用多个Storyboard的方法

5)添加登录按钮相应的事件

-(IBAction)onClickButton:(id)sender 

    
}

6)xib和按钮事件相关联

Storyboard的使用以及使用多个Storyboard的方法

7)按钮事件和上面的复杂控制器相关联

-(IBAction)onClickButton:(id)sender 

    UIStoryboard *stryBoard=[UIStoryboard storyboardWithName:@"Storyboard" bundle:nil]; 
    self.view.window.rootViewController=[stryBoard instantiateInitialViewController]; 
}

8)运行

Storyboard的使用以及使用多个Storyboard的方法Storyboard的使用以及使用多个Storyboard的方法

第三步是多个storyboard共同使用

多人合作或者项目有一定的复杂度,使用一个storyboard,肯定使storyboard复杂,我们可以根据需求把复杂的逻辑拆分成若干个storyboard。

1)我们在上面的基础上在添加一个tabBarController的孩子

Storyboard的使用以及使用多个Storyboard的方法

2)添加一个ManagerViewController

Storyboard的使用以及使用多个Storyboard的方法

3)、新添加的ManagerViewController和相应的控制器相关联

Storyboard的使用以及使用多个Storyboard的方法

4)在视图中添加按钮

Storyboard的使用以及使用多个Storyboard的方法

5)在ManagerViewController中添加按钮事件

-(IBAction)onClickButton:(id)sender 
{

}

6)按钮事件和视图按钮相关联

Storyboard的使用以及使用多个Storyboard的方法

7)添加一个新的storyboard,叫做second

Storyboard的使用以及使用多个Storyboard的方法

8)添加导航器

Storyboard的使用以及使用多个Storyboard的方法

9)在ManagerViewController的按钮事件中导航进入second即可

-(IBAction)onClickButton:(id)sender 

    UIStoryboard *stryBoard=[UIStoryboard storyboardWithName:@"second" bundle:nil]; 
    [self presentModalViewController:[stryBoard instantiateInitialViewController] animated:YES]; 
}

10)运行

Storyboard的使用以及使用多个Storyboard的方法Storyboard的使用以及使用多个Storyboard的方法Storyboard的使用以及使用多个Storyboard的方法Storyboard的使用以及使用多个Storyboard的方法Storyboard的使用以及使用多个Storyboard的方法

上面就是使用storyboard实现一个相对比较复杂的项目。