1

我经历了很多类似的问题,但仍然没有清楚地理解这一点。

在更好的设计方面 - 什么是正确的方法 - 在视图控制器本身中创建所有 UIButtons、UILabels 等,然后将它们添加为子视图,或者我应该创建一个包含所有必需按钮的自定义视图(@interface MyView:UIView)/标签等,然后将该视图分配给视图控制器的视图属性?我没有使用界面生成器。

创建这样的自定义视图或在视图控制器本身中添加所有内容是否有任何真正的需要/优势应该可以/好主意?抱歉,我对 iOS 应用程序开发很陌生 :-)

如果有人可以向我解释 - 将非常有帮助。

4

3 回答 3

0

子类化视图的一些优点是:

  1. 代码分离。如果您有一个复杂的视图并希望保持您的视图控制器干净,请将其子类化并将其分离出来。
  2. 重复使用。如果您在其他任何地方重用该视图,那么当视图是它自己的类时,可以用最少的努力。
  3. 您可以选择要为设置公开的设置和方法

子类化视图的一些缺点是:

  1. View 不再有权访问视图控制器 ivars。
  2. 视图控制器将不再对视图进行直接操作
  3. 您受限于视图在设置和配置方面公开公开的内容(可能是一件好事)。

总的来说,没有单一的最佳答案,这完全取决于您的设置以及您希望如何保持项目井井有条。

于 2013-09-02T14:58:13.177 回答
0

我的不回答:答案在这两个对立面之间:

  • 仅使用基本视图将所有内容放入视图控制器中
  • 使用非常精细的视图来抽象出一些乏味的图形工作。

要了解我在说什么:可以将一个UITableView行为直接实现为UIViewControllera UIScrollView,并处理所有 indexPath 计算(取决于滚动量)、视图回收等......在这个 viewController .

但是,由于列表是一种可视化显示信息的常用方式,所有这些“循环视图”、“为当前显示的单元格设置内容”都已移至自定义视图类:UITableView,并且已使用委托和数据源模式来制作此类行为易于定制。

创建抽象有其优点和缺点。我尝试逐步做事:

  • 在 viewController 中保持最多
  • 当代码变得过于复杂时,或者如果您发现自己需要在其他地方使用相同类型的“组件”:创建自定义视图,并尝试定义其 API(它公开了哪些属性,隐藏了哪些实现)
于 2013-09-02T15:01:26.817 回答
0

视图控制器是一种很好的方法,可以将严格意义上的视图必须执行的操作(处理输入、渲染输出)与视图控制器协调的视图周围的更大层次结构、操作和信息路由分开。

取得适当的平衡取决于许多局部因素。包含标签和图像(如单元格)的视图当然可以“拥有”它的子视图,并像一个容器单元一样出现在控制器中。但请注意,在这种情况下,子视图也支持“单元”单元的输入/渲染。

从这个意义上说,如果您有一个带有一组实际控件的大画布,这些控件“位于”该画布的“顶部”,但不一定由它“拥有”,则视图控制器可能希望创建这些控件并将其附加到视图层次结构中。

于 2013-09-02T15:03:12.130 回答