UI 第十四节 Storyboard

系更直观地展现出来,并提供了一种新的页面间跳转方式 segue。app

StoryBoard 的本质是一个 XML 文件,描述了若干窗体、组件、Auto Layout 约束等关键信息。学习

可是,咱们应该认识到一个更重要的本质:使用 StoryBoard 的 iOS 项目均以初始化 StoryBoard 文件做为整个程序的初始化入口,UIViewController 类是因为被 StoryBoard 绑定而初始化,从而开始运行的。从下面两个地方能够找到蛛丝马迹:3d

01.jpg

02.jpg

奇怪的 bugcode

初学 iOS 开发的时候,若是使用了 StoryBoard,你们可能遇到过这个奇怪的 bug,页面全黑:blog

03.jpg

若是你们跟我同样纯靠找资料自学而没有人教的话,必定出现过死活找不到缘由而新建一个项目的尴尬状况吧 o(╯□╰)o,其实秘密在这里:开发

04.jpg

这表示这个窗体是此 StoryBoard 的初始窗体的意思,这样 APP 在启动之后,会先启动主 StoryBoard,主 StoryBoard 会启动它的初始窗体,初始窗体启动跟他绑定的类,这样 APP 就启动完成了。get

多 StoryBoard 最佳实践it

托福喵 1.0 版是我第一个上架的项目,只用了初始化项目时创建的那惟一的 Main.storyboard,里面有二十几个窗体,在 Xcode 里每次点击打开都要等五秒才能彻底渲染完毕,并且 Segue 线交错纵横,很是凌乱。这显然不是个好的组织方式。io

我如今正在重写的托福喵第二版已经采用了多 StoryBoard 的解决方案,把一些独立的窗体组合放到一块儿使用一个 StoryBoard 进行组织,好比登录注册的几个窗体,考试界面的几个窗体,关于咱们的几个窗体等。下面咱们将一块儿学习如何使用多 StoryBoard。编译

新建第二个 StoryBoard

以下图:

05.jpg

给 Second.storyboard 拖入一个 View Controller:

06.jpg

如何调用 Second.storyboard 中的窗体?

首先,编译项目,咱们获得以下警告:

07.jpg

这个警告的意思是,这个窗体没有入口,没法被触达。如何让他可以被触达?两种方式:

设置为该 StoryBoard 的初始窗体:

08.jpg

给该窗体设置一个 StoryBoard ID:

09.jpg

可以被触达以后,让咱们用代码调用他们:

① 做为初始窗体

let vc = UIStoryboard(name: "Second", bundle: nil).instantiateInitialViewController() as! UIViewController
self.navigationController?.pushViewController(vc, animated: true)

② 设置了 StoryBoard ID

let vc = UIStoryboard(name: "Second", bundle: nil).instantiateViewControllerWithIdentifier("First") as! UIViewController
self.navigationController?.pushViewController(vc, animated: true)

固然,也能够用 self.presentViewController 调用他们。

相关文章
相关标签/搜索