专栏名称: Cocoa开发者社区
CocoaChina苹果开发中文社区官方微信,提供教程资源、app推广营销、招聘、外包及培训信息、各类沙龙交流活动以及更多开发者服务。
目录
相关文章推荐
51好读  ›  专栏  ›  Cocoa开发者社区

如何在Xcode 8中更好地使用StoryBoard

Cocoa开发者社区  · 公众号  · ios  · 2016-11-22 08:09

正文

请到「今天看啥」查看全文



但是这对于开发者来说, 就可能会存在很多问题:


  • 源码控制: StoryBoard 非常难解决合并时候产生的冲突, 所以单独的StoryBoard会使你在团队工作中变得更加轻松。

  • StoryBoard文件会变得非常臃肿和难以驾驭,你有多少次因为点错而无意中改变了ViewController的约束?

  • 你需要为每一个ViewController分配一个StoryBoard的ID, 这非常容易出错: 因为你每次使用这个veiwcontroller的时候都要硬编码这个ID。


如何连接项目里面的不同的StoryBoard? 这里有两种方法:


  • 使用Xcode7中所提供的StoryBoard Reference方案

  • 通过代码来连接StoryBoard


你可以点击 这里 来阅读关于第一种方法的更多的内容。


我将要介绍第二种方法, 因为它在复杂的项目中非常的常见。


2. StoryBoard文件与相关的ViewController subclass使用相同的名称


这将简化命名的约定, 并且提供给你一些与第三条建议相关的好处。


3. 在UIViewController subclass中初始化StoryBoard


在初始化StoryBoard的Base ViewController的代码中, 我经常看到下面这样的代码:


let storyboard = UIStoryboard(name: “Main”, bundle: nil)

let homeViewController = storyboard.instantiateViewController(withIdentifier: “HomeViewController”)


这看起来一点都不清晰: 你需要知道这个StoryBoard的名字, 还需要提供这个ViewController在StoryBoard中的ID, 而且你在创建HomeViewController时, 每次都要使用这种方式。


这有一个更好的方式让你用代码在ViewController中使用类方法来初始化它和它所在的StoryBoard:


class HomeViewController: UIViewController {

static func storyboardInstance() -> HomeViewController? {

let storyboard = UIStoryboard(name: String.className(self),

bundle: nil) return

storyboard.instantiateInitialViewController() as?

HomeViewController

}

}


如果你按照之前的建议来操作, 你就可以避免硬编码 StoryBoard 的名称和实体类的名称。


let StoryBoard = UIStoryBoard(name: String.className(self), bundle: nil)


确保你的StoryBoard的名称和实体类的名称完全相同,否则,当视图引用这个StoryBoard时, 应用程序会崩溃。


这使你代码的可读性更高, 而且可以降低出错率:


class HomeViewController: UIViewController {

static func StoryBoardInstance() -> HomeViewController? {







请到「今天看啥」查看全文


推荐文章
彬彬有理  ·  他说我太松怎么办?
8 年前
高效运维  ·  聊聊日志这件小事情
8 年前
亲仁书屋  ·  丰子恺:我的母亲,也是我的父亲
8 年前
Excel之家ExcelHome  ·  日程表,没用过的同学请举手!
7 年前