创建带StoryBoard的工程和在编码途中加入StoryBoard的差别
2013-07-11 12:55
1126 查看
本文说的情况是:
1.在创建工程时,选中了Use StoryBoards。
2.在创建工程时,没有选中User StoryBoards,在后面想添加StoryBoard。
本文是也是对上一篇文章的补充,上一篇说的不全面(“不要在storyBoard和代码中混用UINavigationController”).
上一篇文章是针对第一种情况的,这时候你Appdelegate里的函数很简单,像下面这个样子():
因为编译器在你创建工程的时候就将MainStoryBoard和Appdelegate关联好了,所以你不需要自己初始化self.window,编译器会调用MainStoryBoard中的window,这时候如果你自己初始化一个window反而会有问题(见上一篇文章)。
对于第二种情况,你的storyBoard是在中途加进来的(命名为Storyboard),那么这个storyBoard并没有Appdelegate关联,编译器也不会自动调用Storyboard中的window。这时候,你就需要自己初始化window了,而且需要用代码去调用StoryBoard和设置rootViewController。
如果我想在项目中使用多个StoryBoard,该怎么办呢?
添加secondStoryBoard,在界面中关联好你想要的ViewController。
在需要跳转到secondStoryBoard时,像这样:
补充:
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中获取指定的视图控制器:
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];
相关文章推荐
- ios-day11-03(有Main.storyboard文件的工程是如何创建控制器的)
- 对VS2008创建工程时无法用UTF8编码的补救措施
- 如何更改MyEclipse所创建的jsp工程的编码方式为utf-8
- 去除Xcode6创建工程时自带的storyboard
- 创建一个Storyboard工程 storyboard是在ios5中引入的新控件,能够更加清晰、简单的整合多个ViewController的关系,下面主要介绍一下怎么初建一个storyboard的工程
- Xcode6 怎么创建一个不带storyboard的空白工程?
- iOS 怎样创建不带storyboard的工程(或只带xib的工程)
- GitHub 版本控制 项目托管 06 创建GitHub本地仓库2-加入代码工程
- C++类创建以后需要UBT加入工程。Mac
- IOS删除Storyboard纯代码工程的创建步骤
- 使用MDK创建stm32 库函数工程简单教程
- 【quick-cocos2dx从零开始做游戏】【二】创建工程与运行
- Android 命令行创建工程
- VS2010中为OpenCV工程创建属性单
- IDEA 旗舰版 使用Maven创建Web工程 并部署tomcat
- cocos2d-x-3.0rc0创建项目 创建工程 cocos2dx-3.0rc0
- VS2008中自定义C++工程模板与修改新建文件默认编码的办法
- UPD 78F0527A 创建工程
- cocos2dx 没有“install-templates-msvc.bat” 创建工程
- (四)svn 服务器端的使用之创建工程目录