StoryBoard 的本质StoryBoard 是苹果在 iOS 5 中引入的新技术方案,目的是给纷繁复杂的 nib、xib 们一个温暖的家,让他们之间的关系更直观地展示出来,并提供了一种新的页面间跳转方式 segue。

StoryBoard 的本质是一个 XML 文件,描述了若干窗体、组件、Auto Layout 约束等关键信息。示例文件:https://github.com/johnlui/AutoLayout/blob/master/AutoLayout/Base.lproj/Main.storyboard

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

奇怪的 bug初学 iOS 开发的时候,如果使用了 StoryBoard,大家可能遇到过这个奇怪的 bug,页面全黑:

如果大家跟我一样纯靠找资料自学而没有人教的话,一定出现过死活找不到原因而新建一个项目的尴尬情况吧 o(╯□╰)o,其实秘密在这里:

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

多 StoryBoard 最佳实践托福喵 【已下架】1.0 版是我第一个上架的项目,只用了初始化项目时建立的那唯一的 Main.storyboard,里面有二十几个窗体,在 Xcode 里每次点击打开都要等五秒才能完全渲染完毕,而且 Segue 线交错纵横,非常凌乱。这显然不是个好的组织方式。

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

新建第二个 StoryBoard

如下图:

给 Second.storyboard 拖入一个 View Controller:

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

首先,编译项目,我们得到如下警告:

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

设置为该 StoryBoard 的初始窗体:

给该窗体设置一个 StoryBoard ID:

能够被触达之后,让我们用代码调用他们:

① 作为初始窗体

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 调用他们。

查看效果

多个storyboard间跳转总结Stroyboard 可以被看作一个管理View画面的集合。也就是说一个iOS专案裡面并没有限制只能有一个Storyboard。

所以在你的APP专案中,你可以把功能相近的View放到同一个APP之中,形成一个群组,方便功能上的管理。

1.在专案中准备2个Storyboard

在一个IOS的专案裡面建立两个StoryBoard。

2. 在第一个StoryBoard中,我们拉出了一个Navigation 的Template,在[Main View Controller]这个中View裡面拉进一个Button。

3. 接著在第二个StoryBoard裡面我们也拉出一个Navigation template。

在画面中拉一个Label标籤,并且在裡面我们把文字改成Storyboard2。这只是用来识别目前我们被带到哪一个画面之中。

4. 在第一个StoryBoard画面中的Botton裡面,我们要在按钮的[TouchUpinside]事件中撰写底下的程式码。

UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"Storyboard2" bundle:nil];

UIViewController* test2obj = [secondStoryBoard instantiateViewControllerWithIdentifier:@"test2"];  //test2为viewcontroller的StoryboardId

[self.navigationController pushViewController:test2obj animated:YES];

第一步就是要先指定UIStoryboard物件,这边我们要指向专案中的第二个Storyboard。

接下来我们要先New出一个Controller物件,这是你要Push到的下一个View页面,他所对应的Controller。

最后使用self.navigationController推网页到下一页。

storyboard搭建项目_iOS应用开发中StoryBoard搭建UI界面的基本使用讲解相关推荐

  1. (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口

    文章目录 (硅谷课堂项目)Java开发笔记2:项目概述,搭建项目环境和开发讲师管理接口 1.项目概述 1.1 项目介绍 1.2 硅谷课程流程图 1.3 硅谷课堂功能架构 1.4 硅谷课堂技术架构 1. ...

  2. 安卓在子线程中实现更新UI界面的三种方法 Handler+Message、runOnUiThread、控件.post()

    1.说明 安卓中UI线程为主线程,更新UI界面必须在主线程中进行,在子线程中实现更新UI界面的三种方法:Handler.RunOnUiThread.控件.post() 2.1 Handler (1)定 ...

  3. java 项目 预警_java开发中的常见代码黄线预警

    java日常开发中,经常会碰到开发工具idea.Eclipse等在一些代码中报黄线,这对于很多具有强迫症的同学来说,也是一件很头疼的事,尤其是编码不注意规范的同学来说. 下面我就列举一些常见的黄线预警 ...

  4. vue脚手架搭建项目_复习之vue脚手架搭建项目的两种方法

    安装脚手架 node 版本要求: > 8.9 . 关于旧版本:如果在这之前已经全局安装了旧版本的vue-cli(1.x 或 2.x),那么需要先卸载掉. 卸载旧版本运行:``npm uninst ...

  5. QT学习开发笔记(项目实战之智能家居物联 UI 界面开发 )

    智能家居物联 UI 界面开发 项目路径为 4/01_smarthome/01_smarthome/01_smarthome.pro,先看项目界面.项目界面如 下,采用暗黑主题设计,结合黄色作为亮色,让 ...

  6. java静态引用_Java开发中静态方法引用和实例方法引用案例详细讲解

    Java开发 前言 在Java的日常开发中静态方法引用和实例方法引用在很多地方都会用到,可以说是万金油,但是你真的掌握了吗?下面就由小编给大家做一个比较细想的讲解,废话不多说现在开始把. 正文 大家对 ...

  7. Java开发关于UI界面_Android开发1:基本UI界面设计——布局和组件

    前言 啦啦啦~本学期要开始学习Android开发啦~ 博主在开始学习前是完完全全的小白,只有在平时完成老师要求的实验的过程中一步一步学习~从此篇博文起,博主将开始发布Android开发有关的博文,希望 ...

  8. 项目、系统开发中的需求分析说明书和需求规格说明书的区别

    项目组成员在针对要开发的系统做需求调研后,就要编写对应的需求说明书. 作为软件工程师,你就得知道需求分析说明书和需求规格说明书的区别,以期在正确的时候编写正确的需求文档. 两者有何不同: (1)面向对 ...

  9. ios xcode文件前缀_IOS Xcode开发中 文件名的后缀名m,mm,cpp,h区别

    文件区别: .h:头文件.头文件包含类,类型,函数和常数的声明. .m :源代码文件.这是典型的源代码文件扩展名,可以包含Objective-C和C代码. .mm :源代码文件.带有这种扩展名的源代码 ...

最新文章

  1. JS传中文到后台需要的处理
  2. go 调用winapi_golang 调用windows API 中文的处理
  3. yum命令安装jdk
  4. Python爬虫框架Scrapy 学习笔记 6 ------- 基本命令
  5. 第三课时:PowerDesigner15基本操作
  6. NodeJs-- 新建项目实例
  7. 使用StyleCop 进行代码评审
  8. linux之iconv命令
  9. itest考试切屏能检测出来吗_itest考试作弊怎么检测
  10. 计算机表格加减乘除符号,excel加减乘除-Excel表格最常用的37种符号,帮你整理齐了!...
  11. 美女SEO系列六:什么是友情链接?
  12. 如何从量化的角度观看股票传统的技术指标
  13. PCB抄板过程中反推原理图的方法
  14. IT“民工”们的中年危机:三十不立的迷茫
  15. 初识whistle代理工具
  16. JAMA Psychiatry: Genetically Informed Methods
  17. MHD-20HDMI高清20倍视频会议摄像头
  18. 基于IPD的测试流程
  19. 北京华为hcie认证必看的什么是SAN-ielab实验室
  20. STM8S103F3P6自带LED灯驱动汇编

热门文章

  1. EDR/DVR标配:政策红利下的市场众生相和未来走向
  2. python graphviz中文乱码_graphviz画决策树图中文乱码问题终极解决方案
  3. 长时间待机的监控摄像机可以持续多久
  4. GitHub:利用GitHub Desktop实现笔记本与台式机的简单协同开发
  5. jupyter notebook中,对tensorflow运行时经常出现“The kernel appears to have died. It will restart automatically”
  6. shutil模块 python_python模块shutil
  7. html界面js自动适应页面,JS实现DIV高度自适应窗口示例
  8. 日本展示类人机器人 强大功能引发伦理思考
  9. 《数据挖掘导论》归纳笔记
  10. CSS基础(1)_CSS基本语法、注释、常用选择器