Storyboard Reference
在某些情况下。你开发的应用可能包括有各种各样的复杂界面,假设你使用Storyboard来管理这些界面,通常你会将这些界面依照对应的逻辑分成很多子模块,放在不同的storyboard里,比方注冊相关的放到Register.Storyboard,图片相关的放到Photos.Storyboard。而主界面放到Main.Storbyoard。
这么做的优点是不仅能够缩小每一个storbyoard的打开速度。并且能够增强维护性,使界面逻辑更加清晰。
通常建议能在Storyboard里做的尽量在Storyboard里做,降低对应的代码量。
在iOS9曾经,Storyboard之间的通信(Segue)仅仅能依靠代码来实现。
比方我们想在Main.Storyboard里引用Login.Storyboard:
let loginStoryboard = UIStoryboard(name: "Login", bundle: nil) //Login为对应Storyboard的名字,不须要后缀名。
let loginViewController = loginStoryboard.instantiateViewControllerWithIdentifier("LoginInterface")// 依据storyboard里声明的StoryboardID获取该storyboard里的ViewController
首先我们通过给UIStoryboard构造方法传入须要引用的Storyboard文件名(这里为Login)。然后在得到的loginStoryboard调用instantiateViewControllerWithIdentifier方法得到对应的ViewController。
好消息是,在Xcode7中引入了Storyboard Reference(故事版引用),能够用来替代上面的代码。
以下将举一个简单的样例来解说怎样使用Storyboard Reference。
首先如果你已经下载了Xcode7-beta版本号。新建一个Single View Application,该模版会自己主动创建一个Main.storyboard文件。同一时候该文件中默认有一个ViewController Scene。在项目里新建另外一个storyboad。取名为Second.storyboard。打开Second.storyboard文件。在Object Library里拖拽一个ViewController,并在属性面板里勾选“Is Initial View Controller”,同一时候将该View
Controller里的view背景颜色设为蓝色以示差别。
如图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG91bmFvYnVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
返回到Main.storyboard文件,拖拽一个Button到唯一一个ViewController里,如今我们想通过点击Button跳转到Second.storyboard里的ViewController里去,该怎样做呢?细致观察Object Library我们会发现多出一个Storyboard Reference,如图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG91bmFvYnVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
这个Storyboard Reference代表Storyboard文件的引用,通过属性面板(Attribute Inspector)能够配置该Storyboard Reference。
Storyboard Reference属性面板有三个字段,第一个字段(Storyboard)指定你要引用的Storyboard文件名称,第二个字段指定你要跳转到哪个ViewController。该ID即为Storyboard里ViewController的Storyboard ID。
假设不填的话,默觉得该Storyboard的Initial View Controller。第三个字段指定该Storyboard存在于哪个Bundle,比方假设来自于其它的Framework。能够指定该Framework的bundle,假设存在于同一个项目,能够留着不填。
如今我们在Main.storyboard里拖拽一个Storyboard Reference到画布里去,点击该Storyboard Reference,在右边的面板里选择属性面板,Storyboard字段选择Second。Reference ID不填(使用Initial View Controller)。bundle也不填。这个时候Storyboard Reference已经配置好了,如图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG91bmFvYnVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
在Main.storyboard文件中,按住Ctrl键不放,鼠标拖拽Button到Storyboard Reference,弹出的对话框里选择Present Modally.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG91bmFvYnVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
好的,大功告成,Build and Run,点击button。你会发现来自于Second.storyboard里的View Controller被成功展示出来。(仅仅是有一个bug,弹出蓝色界面后无法返回了。。
。)
另外,假设曾经的项目仅仅有一个Storyboard文件,你能够依据对应的逻辑重构Storyboard,仅仅须要选中你要重构的View Controllers,然后点击菜单Editor->Refactor to Storyboard,在弹出的对话框中输入新的Storyboard文件名称。然后点击确定,这样你选中的View Controllers所有都被放到新建的Storyboard文件中,同一时候原来的Storyboard文件中用配置好的Storyboard Reference来替代被移除的View Controllers.
Storyboard Reference的更多相关文章
- Xcode 7:Storyboard Reference、Strong IBOutlet以及Scene Dock
本文由CocoaChina译者小袋子(博客)翻译原文:Storyboard Reference, Strong IBOutlet, Scene Dock in iOS 9 在这个教程中,我想要聊一些有 ...
- Xcode中StoryBoard Reference 新特性的使用
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- swift项目第五天:swift中storyBoard Reference搭建主界面
一:StoryBoard Reference的介绍 StoryBoard Reference是Xcode7,iOS9出现的新功能 目的是让我们可以更好的使用storyboard来开发项目 在之前的开发 ...
- iOS之Storyboard References
如果你曾经使用 interface builder 创建过一个复杂.界面非常多的应用,你就会明白最后那些Storyboards 文件变的有多大.他会迅速变的无法管理,阻碍你的进度.自从引入 Story ...
- StoryBoard拆分(Storyboard References)
https://www.jianshu.com/p/78dc76204c8e iOS UI篇10- Storyboard(Storyboard Reference) https://www.aliyu ...
- iOS 9 学习系列:Storyboard References
http://www.cocoachina.com/ios/20150922/13474.html 如果你曾经使用 interface builder 创建过一个复杂.界面非常多的应用,你就会明白最后 ...
- ios-深度解析二维码的生成与使用
利用一个小demo来对二维码进行学习,总共四个界面(主界面,生成二维码界面,识别二维码界面,扫描二维码界面) 一.二维码的介绍 1.什么是二维码? 二维条码/二维码是用某种特定的 ...
- WWDC 2015 - 概记
WWDC 2015已经过去快一个月了,今年似乎没有像去年那样变化巨大,一切都在慢慢演进,iOS.Mac OS.watchOS都变得越来越好. 新的三大平台的发布,iOS 9/Mac OS EL Cap ...
- 音频播放(iOS开发)
音频处理 一.录音 录音应用场景 语音聊天 即时通讯软件中,都包含语音发送功能 语音备忘录 录一段音频,来记录某件事情 录音功能实现 导入AVFoundation框架 作用:一些多媒体的处理,基本上都 ...
随机推荐
- [NodeJS] Node.js 编码转换
Node.js 自带的 toString() 方法不支持 gbk,因此中文转换的时候需要加载第三方库,推荐以下两个编码转换库,iconv-lite 和 encoding. iconv, iconv-l ...
- linux系统cpu和内存占用率
1.top 使用权限:所有使用者 使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] 说明:即时显示process的动态 d :改变显示的更新速度,或 ...
- MVC中的一些不同之处(WebForm)
一. 路由重定向 /// <summary> /// 路由重定向 /// </summary> /// <returns></returns> publ ...
- UISegmentedControl的基本用法
本文转载至 http://www.tuicool.com/articles/yUfURj 原文 http://blog.csdn.net/hmt20130412/article/details/38 ...
- JavaScript的数据类型---最全,最详细的数据类型,高级的工程师从数据类型开始
一.基本数据类型 1.字符串数据类型 var hello="你好啊"; var hello='你好啊';示例:<script language="j ...
- 【python3】window下 vscode 配置 python3开发环境
本文以python3.7 为例 一 下载python3 url : https://www.python.org/downloads/windows/ 提示: 安装过程中.记得勾选 添加环境变量 二 ...
- EXCEL小技巧:如何统计非空单元格
http://club.excelhome.net/thread-1187271-1-1.html 下面教大家如果用函数统计非空单元格的数量 首先我们来介绍几个统计函数: 1.COUNT(value1 ...
- laravel读取memcached缓存并做条件查询
public function onlineplayersource() { $res = $_POST['aoData']; $sEcho = 0; $iDisplayStart = 0; // 起 ...
- Root用户安装MariaDB到 /usr/local/mysql
参考地址: http://www.zhdba.com/mysqlops/2013/08/16/mariadb-cn_1001/ https://mariadb.com/kb/en/mariadb/in ...
- 题目1458:汉诺塔III(不一样的汉诺塔递归算法)
题目链接:http://ac.jobdu.com/problem.php?pid=1458 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...