什么是子类UIView而不是在ViewController中编写所有内容

时间:2013-09-02 14:46:50

标签: ios uiview uiviewcontroller

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

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

创建这样的自定义视图是否有任何真正的需要/优势,或者在视图控制器中添加所有内容应该是好的/好主意?对不起,我是iOS应用程序开发的新手: - )

如果有人能向我解释,那将非常有帮助。

3 个答案:

答案 0 :(得分:0)

子视图的一些优点是:

  1. 代码分离。如果你有一个复杂的视图,并希望保持你的viewcontroller干净,子类并将其分开。
  2. 重用。如果您在其他任何地方重用该视图,那么当视图是它自己的类时,只需要很少的努力就可以实现。
  3. 您可以选择要为设置公开的设置和方法
  4. 子视图的一些缺点是:

    1. 查看不再可以访问视图控制器ivars。
    2. 视图控制器将不再对视图进行直接操作
    3. 您受限于视图在设置和配置方面公开曝光的内容(可能是一件好事)。
    4. 总的来说,没有一个最好的答案,这完全取决于您的设置以及您希望如何保持项目的整洁。

答案 1 :(得分:0)

我的回答:答案在于这两个相反的方面:

  • 在视图控制器中放置一些东西,只使用基本视图
  • 使用非常精细的观点来抽象出一些乏味的图形作品。

要了解我正在谈论的内容:可以将UITableView行为直接实现到只有UIViewController的{​​{1}},并处理所有indexPath计算(取决于关于滚动的数量),视图回收等...在这个非常viewController。

但是,由于列表是可视化显示信息的常用方法,所有这些“回收视图”,“为当前显示的单元格设置内容”已移至自定义视图类:UIScrollView,委托和数据源模式已经被用来使这个类行为很容易定制。

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

  • 在viewController
  • 中保持最多
  • 当代码变得太复杂,或者你认为自己需要在其他地方使用相同类型的'组件'时:创建一个自定义视图,并尝试定义它的API(它暴露了哪些属性,它隐藏了什么实现)

答案 2 :(得分:0)

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

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

从这个意义上讲,如果你有一个大画布,其中包含一组实际控件,这些控件位于该画布的“顶部”但不一定是“拥有”它,那么视图控制器可能会想要创建并将这些控件附加到查看层次结构。