用代码创建并实例化在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中的ViewController

story中得控制器UIStoryboard *board = [UIStoryboard storyboardWithName: @"MainStoryboard" bundle: nil];chi...
  • Mandmg
  • Mandmg
  • 2016年08月22日 19:45
  • 4798

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

http://kyfxbl.iteye.com/blog/1997502 我们的项目最早是基于storyboard开发的,所以一开始所有的ViewController都通过storybo...
  • fevershen
  • fevershen
  • 2016年05月31日 15:09
  • 1078

ios开发----使用代码创建UI界面-----使用Main.storyboard

使用ViewController扩展 #import “ViewController.h” //定义ViewController的扩展 @interface ViewController() ...
  • shb2058
  • shb2058
  • 2016年05月12日 17:56
  • 294

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

通过编码,创建storyboard中声明的ViewController的方法
  • kyfxbl
  • kyfxbl
  • 2013年12月30日 20:16
  • 7111

又踩一坑,从Storyboard创建的ViewController不调用init方法

昨天重构以后,发生一个bug。我把一个ViewController实例变量的初始化代码放在 -(id) init { // init here } 但是这个ViewController是从St...
  • kyfxbl
  • kyfxbl
  • 2013年12月26日 11:38
  • 2942

IOS 代码创建UI界面

UIKit框架 UIResponder – UIApplication – UIView • UIWindow,UILabel,UIImageView,UIPickerViewUIAlertV...
  • u014735194
  • u014735194
  • 2015年12月18日 18:51
  • 553

纯代码创建UI界面入门(一)

一、删除main.storyboard,并在info.plist中删除main storyboard file base name 二、在-(BOOL)application:didFinishL...
  • a380880304
  • a380880304
  • 2015年10月13日 20:30
  • 2065

代码获取Storyboard中的ViewController

Storyboard 的三个重要方法: 1、通过storyboard的名字从某个包中获取(一般设置为nil表示从主包中获取)storyboard: + (UIStoryboard *)st...
  • u012449749
  • u012449749
  • 2016年01月11日 10:06
  • 1320

小技巧6-iOS 获取和跳转到Storyboard创建的ViewController

小技巧6-iOS 获取和跳转到Storyboard创建的ViewController 著作权声明:本文由http://my.csdn.net/Nathan1987_原创,欢迎转载分享。请尊重作...
  • Nathan1987_
  • Nathan1987_
  • 2015年11月10日 17:36
  • 1549

纯代码跳转到xib界面以及storyboard界面

现在在iOS开发中,有三种开发UI的方式,纯代码,xib,storyboard。我是喜欢用纯代码开发的,但是项目中总会有人用其他的方式,那么怎么进行跳转呢?下面分别介绍 1,跳转到xib 假设有一...
  • yqmfly
  • yqmfly
  • 2015年07月06日 11:36
  • 5840
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用代码创建并实例化在storyboard中声明的ViewController
举报原因:
原因补充:

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