在某些情况下。你开发的应用可能包括有各种各样的复杂界面,假设你使用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背景颜色设为蓝色以示差别。

如图所看到的:



返回到Main.storyboard文件,拖拽一个Button到唯一一个ViewController里,如今我们想通过点击Button跳转到Second.storyboard里的ViewController里去,该怎样做呢?细致观察Object Library我们会发现多出一个Storyboard Reference,如图所看到的:



这个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已经配置好了,如图所看到的:



在Main.storyboard文件中,按住Ctrl键不放,鼠标拖拽Button到Storyboard Reference,弹出的对话框里选择Present Modally.



好的,大功告成,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.




參考视频:What's new in Storyboards