您的位置:首页 > 其它

创建带StoryBoard的工程和在编码途中加入StoryBoard的差别

2013-07-11 12:55 1126 查看
本文说的情况是:

1.在创建工程时,选中了Use StoryBoards。

2.在创建工程时,没有选中User StoryBoards,在后面想添加StoryBoard。

本文是也是对上一篇文章的补充,上一篇说的不全面(“不要在storyBoard和代码中混用UINavigationController”).

上一篇文章是针对第一种情况的,这时候你Appdelegate里的函数很简单,像下面这个样子():

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
TDRViewController *tdrVC=[[TDRViewController alloc] init];
[self.window addSubview:tdrVC.view];
//    self.navController=[[UINavigationController alloc] initWithRootViewController:tdrVC];
//    [self.window addSubview:self.navController.view];
return YES;
}


因为编译器在你创建工程的时候就将MainStoryBoard和Appdelegate关联好了,所以你不需要自己初始化self.window,编译器会调用MainStoryBoard中的window,这时候如果你自己初始化一个window反而会有问题(见上一篇文章)。

对于第二种情况,你的storyBoard是在中途加进来的(命名为Storyboard),那么这个storyBoard并没有Appdelegate关联,编译器也不会自动调用Storyboard中的window。这时候,你就需要自己初始化window了,而且需要用代码去调用StoryBoard和设置rootViewController。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
UIStoryboard *storyBoard=[UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];//调用storyBoard
self.window.rootViewController=[storyBoard instantiateInitialViewController];//用storyBoard的rootVC作为window的rootVC
[self.window makeKeyAndVisible];

return YES;
}


如果我想在项目中使用多个StoryBoard,该怎么办呢?

添加secondStoryBoard,在界面中关联好你想要的ViewController。

在需要跳转到secondStoryBoard时,像这样:

UIStoryboard *secondStoryboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil];
[self presentModalViewController:[secondStoryboard instantiateInitialViewController] animated:YES];


补充:

1.有时候发现在StoryBoard中的ViewController中设置好的title,button在程序运行的时候并没有显示出来,这里的原因是你在代码中用类似于下面的代码:ViewController *VC=[[ViewController alloc] init]生成了一个ViewController新的实例,这个实例并没有与StoryBoard中的ViewController相关联。

为了避免这种情况,你可以通过StoryBoard来生成ViewController的实例。首先,在Identity Inspector中为ViewController设置StoryBoardID,Xcode4.6中设置如下:



以前版本的Xcode,设置项在attributes Inspector->View Controller->identifier.

然后,使用Identifier从Storyboard中获取指定的视图控制器:

UIStoryboard *mainStory=[UIStoryboard storyboardWithName:@"MainStoryBoard" bundle:nil];
diskMainViewController *diskMainVC=[mainStory instantiateViewControllerWithIdentifier:@"diskMainVC"];
[self.navigationController pushViewController:diskMainVC animated:YES];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: