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

本文说的情况是:

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];



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值