StoryBoard是iOS开发中很直观的开发工具,它可以极大的提高开发效率,但是StoryBoard由于能直接描述多个控制器页面,也会引发一些问题。
当团队开发时,StoryBoard中的拖入的控制器过多会导致界面错综复杂。并且协同开发中特别容易出现冲突。如果冲突出现了也会特别难以解决,各种连线会直接影响问题排查。
苹果也意识到了这个问题。在iOS 9 以后引入了一个StoryBoard Reference特性。很好的解决了这个问题。
StoryBoard Reference
介绍
StoryBoard Refrence就是StoryBoard 引用的意思,它为其他的StoryBoard 提供了一个占位的控制器
使用
它使用很简单:如图,本来是tabbarcontroller --> navigationController --> viewController 这样的结构,但是自控制器多了很乱,也不易调试。所以可以将每个自控制模块单独抽取出来,创建一个独立的StoryBoard。
操作如下
如图会将对应的模块转化成一个新的StoryBoard,并在原来部分生成一个StoryBoard Reference。效果非常直观!
对应的就会生成几个新StoryBoard。对应的StoryBoard就是原来每个模块的单独部分,这样不仅看起来更加直观了,还消除了很多安全隐患。
至于新的StoryBoard的使用就直接通过StoryBoard来创建对应的ViewController来设置对应的UI页面了。
小结
- 1.StoryBoard Reference 很方便使用,解决了StoryBoard过于庞大之后不易维护的问题。
- 2.StoryBoard Reference 是iOS 9 之后的新特性,如果直接使用会导致系统版本在iOS 9 以下的机型无法使用
- 3.StoryBoard Reference 做 iOS 9 以下适配。可以删除对应的StoryBoard Reference,并根据生成的新StoryBoard 通过代码来加载对应的StoryBoard 中的ViewController。
更新实际操作
- 在Main.storyboard中加了一个 TabbarViewController 把原来的ViewController 删除 入口箭头指向 TabBarVC,并指定到MainViewController
- 加一个item 加一个 NavigationController 箭头指向过去设为 controllers 添加多个
开始操作(重点)
- 同时选中两个 Navi和root ->Editor->Refactor to Storyboard
- 分别都操作一次后 结构就很清晰了
拓展
现在这个main.storyBoard 还是有几条线和 几个 scene 觉得还是很烦
- 1.取消连线 右键mainViewcontroll 点击X 删除 4个StoryBoard Reference
- 2.在MainViewController 添加代码
import UIKit
class MainViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
addChildVc("Home")
addChildVc("Rank")
addChildVc("Discover")
addChildVc("Profile")
}
fileprivate func addChildVc(_ storyName : String) {
// 1.通过storyboard获取控制器
let childVc = UIStoryboard(name: storyName, bundle: nil).instantiateInitialViewController()!
// 2.将childVc作为子控制器
addChild(childVc)
}
}
- 注意上面的名字要写对 一一对应 不然早不到 其实这一步没有必要 添加代码反而更加没意思了