正文
但是这对于开发者来说, 就可能会存在很多问题:
-
源码控制: StoryBoard 非常难解决合并时候产生的冲突, 所以单独的StoryBoard会使你在团队工作中变得更加轻松。
-
StoryBoard文件会变得非常臃肿和难以驾驭,你有多少次因为点错而无意中改变了ViewController的约束?
-
你需要为每一个ViewController分配一个StoryBoard的ID, 这非常容易出错: 因为你每次使用这个veiwcontroller的时候都要硬编码这个ID。
如何连接项目里面的不同的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? {