Xcode 中的 StoryBoard Reference 新特性的使用

1,777 阅读2分钟

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)
    }
}
  • 注意上面的名字要写对 一一对应 不然早不到 其实这一步没有必要 添加代码反而更加没意思了

添加TabItem的图片和修改Title