用代码创建并实例化在storyboard中声明的ViewController

我们的项目最早是基于storyboard开发的,所以一开始所有的ViewController都通过storyboard创建,并通过segue连接跳转

但是今天其中一个controller的view,我们需要特别美化一下,用storyboard做很麻烦。所以就把它从storyboard里拿出来了。问题是,原来的segue就不能用了,需要用编码的方式来实现涉及到此controller的跳转

跳转进此controller的代码很常规,之前做模态页面开发的时候已经试过了,所以很简单就写出来:

[objc] view plaincopy

  1. YLSBootstrapViewController *bootstrapViewController = [[YLSBootstrapViewController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]];
  2. bootstrapViewController.view = [[YLSBootstrapView alloc] initWithFrame:CGRectNull];
  3. [self presentViewController:bootstrapViewController animated:YES completion:nil];

上面3行代码,分别创建controller,view,以及跳转。但是要从这个controller跳到下一个controller不知道怎么写,因为下一个controller还是由storyboard负责加载和实例化的,不能通过调用initWithNibName:bundle:来创建

搜索了一下,网上说storyboard创建controller,内部调用的是initWithCoder方法,所以在这个方法上研究了一会,最后也没成功,主要是不知道应该如何传参。最后发现方向错了,应该调另一个API:

[objc] view plaincopy

  1. // 从storyboard创建MainViewController
  2. UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"nailshop" bundle:[NSBundle mainBundle]];
  3. YLSMainViewController *mainViewController = (YLSMainViewController*)[storyboard instantiateViewControllerWithIdentifier:@"mainViewController"];
  4. [self presentViewController:mainViewController animated:YES completion:nil];

在调用之前,需要在storyboard里,给目标ViewController设置identifier

这样就可以通过编码方式,创建storyboard中的ViewController了

PS:

创建ViewController的方式主要就2种。如果通过代码的方式,就调用initWithNibName:bundle:方法;如果是通过storyboard自动创建,则storyboard会隐式调用initWithCoder:方法,这个API一般不需要开发者直接调用,而是通过storyboard API来间接调用。而UIViewController自身的各生命周期方法,根据创建方式的不同,在调用上也会有区别,比如说viewDidLoad方法,在通过initWithNibName:bundle:方法创建的时候,根本就不会被调用

时间: 2024-11-05 13:48:23

用代码创建并实例化在storyboard中声明的ViewController的相关文章

大钟的ios开发之旅(4)————简单谈谈ios程序界面实现的三种方式(代码创建,xib和storyboard)

/******************************************************************************************** * author:[email protected]大钟 * E-mail:[email protected] *site:http://www.idealpwr.com/ *深圳市动力思维科技发展有限公司 * http://blog.csdn.net/conowen * 注:本文为原创,仅作为学习交流使用,转

代码设定的按钮与storyboard中的xib页面间的跳转

1.首先实现按钮点击跳转的实现方法 - (IBAction)go:(id)sender { UIStoryboard *secondStroyBoard=[UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *test2obj=[secondStroyBoard instantiateViewControllerWithIdentifier:@"Demo"]; [self.nav

如何装载Storyboard中的ViewController?

如上图所示,如何装载Storyboard中指定的ViewController? 首先,需要指定ViewController的ID,如上图右上方红色方框内的Storyboard ID.然后使用下面的代码: [cpp] view plaincopy UIStoryboard* mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; LeftViewController *

Spring Boot 使用Java代码创建Bean并注册到Spring中

从 Spring3.0 开始,增加了一种新的途经来配置Bean Definition,这就是通过 Java Code 配置 Bean Definition. 与Xml和Annotation两种配置方式不同点在于: 前两种Xml和Annotation的配置方式为预定义方式,即开发人员通过 XML 文件或者 Annotation 预定义配置 bean 的各种属性后,启动 Spring 容器,Spring 容器会首先解析这些配置属性,生成对应都?Bean Definition,装入到 DefaultL

同过代码 加载 storyboard 中的 控制器 controller

一.通过代码加载storyboard文件创建控制器的view   Test.storyboard  前名是文件名,后面的storyboard是文件的扩展名 // 1. 应用程序启动完成,会调用此方法,启动之后,将不再调用此方法!// 如果因为内存等原因,应用程序被操作系统干掉,再次点击图标,会调用此方法! - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)l

Swift编程中字符转为类,代码创建控件详解

在swift编程(http://www.maiziedu.com/course/ios/16-161/)中,我们都会遇到这样两个问题,如何把字符转为类和代码创建控件的方法,下面就具体讲解这两个知识点 在使用类之前要先获得 命名空间 通过json来获取 字符型的类名 然后创建类对象,这时候就要用到字符转类 // 从info字典中获取到 命名空间 转为字符型 let NS = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"

SharePoint 2013 中代码创建列表查阅项字段

1.首先,打开VS创建两个List Definition,分别是Address和City,如下图: 2.City列表里修改Title为City Name,其实内部名称还是Title,注意一下: 3.给City的列表实例,添加几个值,用来测试使用,如下: 4.在Address列表里添加几个字段,分别是CityName(LookUp类型)和HomeAddress(Single Line of Text),如下: 5.查看Address列表的Schema.Xml,尤其是Fields节点,也就是字段,如

ios7 中代码创建 ScrollView TextView 等,默认向下缩进的解决办法

这个问题,记得以前困扰了好久.表现出来的现象就是 ScrollView 中的 ContentView 会往下移动一段距离,现在 textView 也是如此,会自动将光标下移. 后来发现这个距离差不多是 NavigationBar 的高度,才从这里找问题,最终找到了. @property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES 需要设置

Scala中数组的创建及实例化

Scala创建以及实例化的方式: //创建一个长度为3的字符串数组,并逐个赋值,然后打印输出结果 val greetStrings = new Array[String](3) greetStrings(0)="Hello" greetStrings(1)="," greetStrings(2)="world\n" for(i <- 0 to 2){ print(greetStrings(i)) } 注意:Scala中访问数组中某个元素使用