Storyboard的出现,让开发变得像讲故事一样,UI间的关系流程也一目了然。它其实是xib的升级版本,将多个xib统一管理了。任何事都有双面性,Storyboard也有它的缺点。笔者就说说自己的经验,版本管理中,多人修改很容易严生冲突。storyboard中UIViewController太多,找到想要的比较困难(特别是在MBA上)。 这些缺点在结队开发中就会遇见。 如果我们用xib文件,这样将UI最小化分隔开,将后用code将这些小单元连接起来,就可以解决这个问题。如果只用xib就展现不出storyboard的故事情节能力。
本人提供两种解决方案:
1. Xib link Xib
2. Storyboard link Storyboard
其实它们之间可以两两组合,这样就可以延伸出另外两种方法:
3. Xib link Storyboard
4.Storyboard link Xib
1. Xib link Xib
这种方法其实我以上一篇文章已经介绍过了,大家自行阅读,在此也不多述。
2. Storyboard link Storyboard
这种方法与上面方法原理是一样的,利用加载storyboard时,实例化对应自定义UIViewController类,然后手动addSubview到对link view上,以达到链接的目录。 用言语表达是有点抽象,还是用代码表达吧,容易理解。
在这儿用到了Github上一个人写的link代码:RBStoryboardLink。它的用法也在README中说得很清楚了。
大家将源码下载下来,里面有一个sample:LinkedTabs. 由于原作者用到了cocoapods,所以需要到源码LinkedTabs目录下, 运行一个命令行:
- pod update
我还是简单说一下sample的结构。
里面有三个storyboard,分别是MainStoryboard,FirstTabStoryboard, SecondTabStoryboard, 现在需要将MainStoryboard中的两个UIViewController分别与FirstTabStoryboard,SecondTabStoryboard建立连接,以达到程序运行后,这三个storyboard像是在一起的目的。
打开MainStoryboard,定位到Tab1的UIViewController
注意图中两个箭头,上面一个一定要填这个自定义类RBStoryboardLink, 就是个类完成了连接的任务。
下面一个箭头处,是传递的属性与对应的值,在实例化RBStoryboardLink的时候传送递给实例化对象。storyboardName这个属性表示要link到哪儿去,这儿我们要link到FirstTabStoryboard,所以值为FirstTabStoryboard。还有一个可选属性sceneIdentifier, 表示要link到Storyboard中的哪一个UIViewController. 如果不传这个属性,那就link到FirstTabStoryboard中的initial View Controller.
如果我们想link到FirstTabStoryboard中的第二个UIViewController那如何办呢,很简单:
如上图,我们先找到这个被linke的View Controller,然后在Storyboard ID那输入该View Controller的标识,如在此输入:NavController.
接着在需要link的地方加入sceneIdentifier:NavController, 见下图箭头处。
这样就link成功了。
方法3与方法4只是组合出来的方法,也不在此多述了。