Ios 嵌入视图控制器还是添加子视图更好?

Ios 嵌入视图控制器还是添加子视图更好?,ios,cocoa-touch,Ios,Cocoa Touch,例如,如果我需要一个UITableView显示在视图中其他内容的下方,那么最好的做法是: 将UITableView添加为子视图,或 添加包含UITableViewController的容器视图 据我所知,两者都能提供相同的用户体验,但我想知道哪种方法被视为最佳实践?iOS的一般规则,尤其是iPhone/iPod touch的外形,是在任何给定时间屏幕上都应该只有一个视图控制器。我能想到的唯一一种情况是,当您有一个内置了大量逻辑的子视图,并且该子视图需要包含在多个其他视图中时,您会想要违反该准

例如,如果我需要一个
UITableView
显示在视图中其他内容的下方,那么最好的做法是:

  • UITableView
    添加为子视图,或
  • 添加包含
    UITableViewController
    的容器视图

据我所知,两者都能提供相同的用户体验,但我想知道哪种方法被视为最佳实践?

iOS的一般规则,尤其是iPhone/iPod touch的外形,是在任何给定时间屏幕上都应该只有一个视图控制器。我能想到的唯一一种情况是,当您有一个内置了大量逻辑的子视图,并且该子视图需要包含在多个其他视图中时,您会想要违反该准则。例如,popover应该有自己的视图控制器,因为它可能需要与多个其他视图控制器一起显示


在您的情况下,我强烈建议只将UITableView添加为子视图,除非(1)表视图有许多与父视图控制器无关的逻辑,或者(2)您需要在应用程序的另一部分中显示相同的表视图。

您有几个选项:

  • 添加一个
    UITableView
    ,并使包含的视图控制器成为表视图的数据源和委托
  • 添加一个
    UITableView
    ,并将其他一些类作为表视图的数据源和委托
  • 使用该表创建一个单独的视图控制器,然后将第二个视图控制器添加为第1个的子视图控制器
  • 选择取决于适当的责任划分和封装

    如果需要在多个视图控制器中嵌入表视图,选项2和3允许重用


    你的问题没有简单的答案。这完全取决于您的需求、数据和应用程序的结构。

    出于以下原因,我宁愿使用容器视图控制器:

    • 它可以在应用程序的另一部分中重用
    • 维护对象的单一职责(例如,主视图控制器侧重于显示有关模型的信息,而表视图控制器处理有关模型中关系的信息的显示)
    • 使源文件更小,更易于阅读
    • 更容易为其构建测试

    但最终,它们都是有效的解决方案。

    每个控制器的每个视图都很容易编写和调试。但是,您可能会创建与同一视图控制器交互的不同模型对象,例如datasource和delegate,它们可能是不同的对象。添加子视图控制器的功能似乎是朝着不同的方向移动。这里有一篇关于这一切的好文章:Android世界已经发生了“一屏一屏”的变化。如果结果更好,iOS世界也会朝这个方向发展,这只是时间的问题。将应用程序分成多个组件总是一件好事。@JamesRichard这很好。谢谢你的链接。谢谢大家的讨论。我想还值得一提的是,使用容器视图还具有支持静态UITableViewCells的额外好处,我认为目前只有UITableViewController中才提供静态UITableViewCells。