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

转载 2016年05月31日 15:09:10


http://kyfxbl.iteye.com/blog/1997502

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

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

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

Objc代码  收藏代码
  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代码  收藏代码
  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:方法创建的时候,根本就不会被调用


IOS开发storyboard创建controller黑屏以及控件不显示问题。

其实我觉得StoryBoard真的很没用,除非是特别简单就一两个页面,而且页面样式简单的还比较方便,稍微复杂点,就不好用了。推荐删掉StoryBoard,用xib来自定义所有的view。 今...

iOS UI篇11- Storyboard(快速实例化)

Storyboard Name和identifier如果不对,将会抛出异常。怎么避免这个问题呢?本文讨论的是如何从多个Storyboard中取出控制器实例。不用管控制在哪个Storyboard文件里,...

Java知识点整理:第五章:类的声明,构造方法,方法,继承中的构造器,对象实例化过程

1.类的声明:            类是由对象抽象出来的.类是对象的模板,是用来描述对象的.            例如:书:书号  书名编号 作者  价钱...           1....

类声明、类实例化对象、对象中成员的访问、特殊对象的引用$this

类的声明面向程序的单位就是对象,但是对象又是通过类实例化出来的。首先我们要知道如何声明一个类。...

Spring容器Bean的实例化方式和声明周期

Spring容器中,Bean的实例化方式还是有三种的。第一种就是最普通的直接构造,第二种和第三种分别是使用工厂 生产模式来实例化Bean。下面来仔细说一下。 首先建立工厂类package com....

如何:声明、实例化和使用委托(C# 编程指南)GOOD

下面的示例阐释声明、实例化和使用委托。BookDB 类封装一个书店数据库,它维护一个书籍数据库。它公开 ProcessPaperbackBooks 方法,该方法在数据库中查找所有平装书,并对每本平装书...
  • Baple
  • Baple
  • 2014年05月14日 06:59
  • 623

实例化代码

  • 2012年11月11日 00:04
  • 15KB
  • 下载

IOS开发之获取Storyboard创建的ViewController

前面的两篇博客都是学习有关屏幕适配也就是相对布局的东西,这篇博客中将会学习视图间的切换。视图间的切换我们可以用代码完成或者用storyboard来建立各个视图控制器间的关系。在需要用到代码进行切换时会...

WSDL文件复杂类型的解析及其实例化代码生成

1.设计要求根据WebService的地址,对其WSDL文件进行解析,重点解析其中包含的复杂类型。针对解析出的复杂类型的结构,生成对应的类实例化代码。2.WSDL解析过程WSDL的解析过程就是对WSD...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用代码创建并实例化在storyboard中声明的ViewController
举报原因:
原因补充:

(最多只允许输入30个字)