RBStoryboardLink 的简介

1. Intro

今天简单介绍一下RBStoryboardLink,这是一个方便在某个storyboard(下面我要用SB代之)中调用其他 SB 中的viewcontroller的项目

2. RBStoryboardLink

2.1 为什么要使用

当Apple越来越重视的SB时候,设计师们也愈发喜欢 SB 。如果你有一位喜欢使用SB的设计师,那么恭喜你,你可以少做很多开发准备了。然而,从项目的组织结构来考虑,不管是设计师或是开发人员,都不会使用单一SB(项目简单的除外)。我们往往会使用模块化的方式来分解,比如tab结构的app,每一个tab就可以视为一个模块。而sb文件中页面的跳转不能离开当前的sb文件,这时涉及到模块间页面跳转的情形,在sb中就无能为力了。通常的做法,就需要在代码中实现:

//生成一个sb对象
//获取此sb对象中的某一个scene
//push/present该scene

而 RBStoryboardLink 就可以让你不依赖于代码,直接在sb文件中进行简单的“连接”即可。
详细的使用方法见How to Use(这里不做搬运苦力活了)。

2.2 内部实现

内部的实现说起来不复杂,但是有很多细节需要注意。
使用方法中,需要在当前的sb文件中新建一个scene A,然后把该scene连接到其他sb文件中的scene B中。这在代码中就依赖于: 首先通过在SB中给 A 添加的User Defined Runtime Attributes中的属性将其他的SB文件以及相应的scene的identifier(如果有)获取到,然后生成sb对象和scene;接下来就通过addChildViewController,把B作为子类加到A上去,这样的话A就相当于母板的功能。此外,还需要把A的一些属性转移到B,比如是UINavigationItemUIBarButtonItem 的属性。这样,B就获得了pop到A的前一页面的能力。更多需要设置的细节,请阅读源码,相信会有不少的收获。

3 其余收获

主要指的是 User Defined Runtime Attributes,这个在cocoa开发的时候经常会用到,在iOS上也有不少geek的用法。这里不做讨论,只是做个记录,提醒自己不要忘记了。大家google下,就能发现很多。