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

4
例如,如果我需要在视图中添加其他内容的情况下显示UITableView,那么最佳实践是将其作为子视图添加还是添加包含UITableViewController的容器视图?
据我所知,两种方法都会提供相同的用户体验,但我想知道哪种方法被认为是最佳实践?

每个视图控制器的每个控制器都很容易编写和调试。但是,您可以创建不同的模型对象,这些对象与相同的视图控制器交互,例如数据源和委托可以是不同的对象。 - Sandeep
3个回答

6
您有几个选项:
  1. 添加一个 UITableView,并将包含的视图控制器作为表视图的数据源和代理。
  2. 添加一个 UITableView,并使其他某个类成为表视图的数据源和代理。
  3. 创建一个带有表格的单独视图控制器,然后将第二个视图控制器作为第一个视图控制器的子视图控制器添加进去。
选择取决于适当的职责划分和封装。
如果您需要将表视图嵌入到多个视图控制器中,则选项2和3允许重用。
对于您的问题,没有简单的答案。这完全取决于您的需求、数据和应用程序结构。

3
iOS的一般规则,特别是对于iPhone/iPod touch这种形态的设备,是在任何给定时间屏幕上只应该有一个视图控制器。我所能想到唯一需要违反这个准则的情况是当你有一个子视图内置了大量逻辑,并且该子视图需要包含在多个其他视图中时。例如,弹出窗口应该有自己的视图控制器,因为它可能需要与多个其他视图控制器一起显示。
在您的情况下,我强烈建议将UITableView作为子视图添加,除非(1)表视图具有与父视图控制器不相关的大量逻辑,或者(2)您需要在应用程序的另一个部分显示相同的表视图。

3
在今天的iOS中,我不同意那个通用规则。添加子视图控制器的能力似乎是朝着不同的方向发展。这里有一篇关于这方面的好文章:http://www.objc.io/issue-1/containment-view-controller.html - James Richard
“一屏幕一个”模式已经在Android世界中发生了变化。如果这种方式被证明更好,那么iOS世界也将朝着这个方向发展,这只是时间问题。将应用程序切分成组件始终是一件好事情。 - allprog
@JamesRichard 很好知道这个。感谢提供链接。 - bdesham
感谢大家的讨论。我想值得一提的是,使用容器视图还具有支持静态UITableViewCells的附加好处,我相信这些单元格目前仅在UITableViewController中可用。 - Andrew Sula

1
我更倾向于使用容器视图控制器,理由如下:
  • 可以在应用程序的其他部分重复使用。
  • 保持对象的单一职责(主视图控制器专注于显示有关模型的信息,而表视图控制器处理有关模型中关系的信息,例如)。
  • 使源文件更小,更易于阅读。
  • 更容易构建测试。
尽管如此,它们都是有效的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接