6 个单独的 UIViewController 还是只有一个具有不同数据源的 segue 决定?

6 separate UIViewControllers or just one with different data sources decided at segue?

我正在 Swift 中构建一个 iOS 应用程序,它的起始页有 6 个按钮。这些按钮中的每一个都将连接到一个 table 视图控制器,其数据由 NSFetchedResultsController 管理(应用程序使用核心数据)。现在,我可以看到创建 6 UITableViewControllers 很容易,但是我想知道将每个按钮发送到相同的 UITableViewController 并仅更改数据 loaded/managed 是否更明智在 prepareForSegue 方法中设置某种标志?

此处的最佳做法是什么?拥有 6 tableViewControllers 每个都由它自己的 NSFetchedResultsController 支持似乎很疯狂,因为每个所需代码的大部分都是可重用的并且可以被子类化并多次使用。

我不知道这个问题是否会因为基于意见而被关闭,但这是我的想法:

绝对只使用一个视图控制器并在prepareforsegue()

中更改了数据源

想象一下有 6 个不同的控制器,然后在 6 个月内决定要更换整个 UI!!!我做到了。不漂亮。这就是我重新配置所有内容并缩减视图控制器总数的关键。

甚至不要让我开始在多个屏幕上进行自动布局的痛苦。你知道我要去哪里了。

如果您可以使用单个代码库以支持所有六个视图控制器的方式编写单个视图控制器,那么重用单个 UITableViewController 就非常有意义。其他方法包括

  • Composition - 为数据源做一个class,在打开table视图前配置好,传给table 在 segue 上查看
  • Subclassing - 制作一个抽象的基础视图控制器,并将其扩展六次。覆盖一两个抽象方法以减少重复量
  • Helper - 创建一个 class 来保存在六个视图控制器之间共享的所有可重用逻辑,并从六个非常滑动的控制器调用它的方法。

你想要避免的一件事是这样的代码:

if (viewControllerType == ViewControllerOne) {
     doSomethingSpecial()
} else if (viewControllerType == ViewControllerTwo) {
     doSomethingElseSpecial()
} ... // and so on

当您拥有这样的链条时,您就知道您已经错过了子类化的机会。