我们的项目最早是基于storyboard开发的,所以一开始所有的ViewController都通过storyboard创建,并通过segue连接跳转
但是今天其中一个controller的view,我们需要特别美化一下,用storyboard做很麻烦。所以就把它从storyboard里拿出来了。问题是,原来的segue就不能用了,需要用编码的方式来实现涉及到此controller的跳转
跳转进此controller的代码很常规,之前做模态页面开发的时候已经试过了,所以很简单就写出来:
YLSBootstrapViewController *bootstrapViewController = [[YLSBootstrapViewController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]];
bootstrapViewController.view = [[YLSBootstrapView alloc] initWithFrame:CGRectNull];
[self presentViewController:bootstrapViewController animated:YES completion:nil];
上面3行代码,分别创建controller,view,以及跳转。但是要从这个controller跳到下一个controller不知道怎么写,因为下一个controller还是由storyboard负责加载和实例化的,不能通过调用initWithNibName:bundle:来创建
搜索了一下,网上说storyboard创建controller,内部调用的是initWithCoder方法,所以在这个方法上研究了一会,最后也没成功,主要是不知道应该如何传参。最后发现方向错了,应该调另一个API:
// 从storyboard创建MainViewController
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"nailshop" bundle:[NSBundle mainBundle]];
YLSMainViewController *mainViewController = (YLSMainViewController*)[storyboard instantiateViewControllerWithIdentifier:@"mainViewController"];
[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:方法创建的时候,根本就不会被调用
分享到:
相关推荐
在StoryBoard动态加入UIViewController 我们先创建一个Tabbed Aplicaiton,这里包含两个viewController,一个first view controller ,一个second view controller ,我们想动态的创建第三个viewController , 即一点...
Todd Miranda演示了如何在运行时创建和执行一个故事板(Storyboard)。
使用IOS5以后新加的Storyboard创建复杂布局项目,同时结合xib文件和Storyboard共同使用
NULL 博文链接:https://luckfox.iteye.com/blog/1826416
不过,如果是在合作开发中,如果两个人同时修改同一个storyboard文件时,就会引起代码冲突,因此需要每个合作开发的每个开发者都要建立一个自己的storyboard,便于维护和修改。这个小demo就是用来简单地介绍多个...
在StoryBoard中不仅可以看到每个ViewController的布局样式,也可以明确地知道各个ViewController之间的转换关系。相对于单个的xib,其代码需求更少,也由于集合了各个xib,使得对于界面的理解和修改的速度也得到了更...
简单的使用storyboard国际话,其中的一种方式。
Crank Storyboard Suite汽车仪表盘设计实例
使用storyboard布局的TabbarViewController框架,包含多个storyboard,xib与storyboard混合使用,并提供两种侧滑返回上一个页面的方法。兼容iphone,ipad,支持ios6以上
Xcode6.1创建仅xib文件无storyboard的hello world应用
storyboard-fountain, 以最简单的方式为剧本创建 Storyboard 更新:从底层开始的新版本: https://github.com/setpixel/storyboarder请在更新后进行更新。喷泉喷泉Storyboard 喷泉使得你可以以轻松地画出一个剧本,...
自己研究写的一个storyboard 小demo 里面包含了常用的方法,看懂这个基本上你就会用storyboard了
ios通过storyboard实现helloworld显示
一个演示xcode中Storyboard使用的小例子,出处为ios5 by tutorials这本书。详见raywenderlich.com
简单实用xib自定义UIView,并在StoryBoard中使用,demo十分简单,适合新手
用storyboard开发了一个小的tableview的demo,供大家学习storyboard使用。
们经常会用到.xib文件,在其中我们可以进行界面的设计。不过如果想切换视图,我们就得自己写很多代码。自从苹果推出了Storyboard,我们可以在一个编辑区域设计多个视图,并通过可视化的方法进行各个视图之间的切换
Storyboard是一项令人兴奋的功能,在iOS5中首次推出,在开发app的界面时可以极大地节省时间。 如下图所示,这就是一个完整的应用的storyboard,接下来我们要学习如何通过这种方式创建应用。 现 ...
Nori:为代码控修改 storyboard 提供一个新的途径
这个UIViewController的类别提供了一个便利的方法,可以直接生成一个控制器实例,而不用理会这个控制器是在哪个storyboard中创建的。 github:https://github.com/developforapple/DDStoryboard 欢迎给 star