【问题标题】:6 separate UIViewControllers or just one with different data sources decided at segue?6 个单独的 UIViewControllers 还是只有一个在 segue 决定的具有不同数据源的?
【发布时间】:2016-03-07 19:30:32
【问题描述】:

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

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

【问题讨论】:

    标签: ios swift uitableview core-data nsfetchedresultscontroller


    【解决方案1】:

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

    • 组合 - 为数据源创建一个类,在打开表格视图之前对其进行配置,并将其传递给 segue 上的表格视图
    • 子类化 - 制作一个抽象的基础视图控制器,并将其扩展六次。重写一两个抽象方法以减少重复次数
    • Helper - 创建一个类,其中包含在六个视图控制器之间共享的所有可重用逻辑,并从六个非常滑动的控制器中调用其方法。

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

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

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

    【讨论】:

    • 不错的建议 - 组合是我的想法,不知道它有一个名字,更适合 MVC,而不是把它全部放在 tableviewcontroller 中
    【解决方案2】:

    我不知道这个问题是否会以基于意见的方式结束,但这是我的想法:

    绝对只使用一个视图控制器,并更改prepareforsegue()中的数据源

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

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

    【讨论】:

    • 我的部分想法是避免将来出现 6 个 UI 模块的情况,Apple 很容易将新的控制器放入其中,它们充当代表和数据源,很难摆脱这种情况模式并考虑可重用性和避免复制代码
    • @SimonBarker 绝对。您还可以考虑在该 tableViewController 中使用单独的单元格,然后将您当时想要使用的单元格出列。
    • 嗯,好的 - 这就是重用标识符的重点吗?允许您根据代码中发生的情况选择不同类型的单元格?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多