design-patterns - UIVIew 或 UIViewController 中的复杂 View 设置? (设计决策)

标签 design-patterns ios uiview uiviewcontroller

目前,我以编程方式设置了大部分 UI。有两种方法可以安排属于屏幕的 View (除了使用 nib 之外):

  • 在 View Controller 中,管理所有 View (它是一个 View Controller !)
  • 创建一个自定义的 UIView 子类,然后将其连接到 Controller 中

我知道两者都可以,但在哪些情况下您会选择哪种解决方案?

此外,对于第一个变体,可以选择在 viewDidLoad 中进行设置并将 View 添加到 self.view,或者构建容器 View 并在 loadView 中添加所有 View 。此处的任何好的建议也将不胜感激。

当您将完整 View 设置为 Controller 的 View 时,第二个变体接近于使用 Nib 。

不打算在这里开始一场宗教 war ,而是为这两种方法寻找论据。

最佳答案

我能想到几个标准,我会用它们来选择一个选项。

如果 View 集是或可能是在许多屏幕上显示的可重用组件,我会赞成创建 UIView 子类。

如果 View Controller 需要直接访问多个 View ,我会在 Controller 中构建它们。我尝试使自定义 UIView 类成为不透明容器,因此它们的 Controller 只需要与父 View 交互,而不是深入了解其 subview 。

如果 View 集不能提供处理单个概念的 API,例如,如果 View 层次结构仅用于正确设置 View 的 z-index,而这些 View 处理显示不相关的数据,那么我将再次创建他们在 Controller 中。 UIView 子类应负责仅显示一组连贯的数据,或以一致的方式管理一组 subview 。

如果 View 需要相对于其层次结构之外的 View 进行定位,我会再次赞成在 Controller 中定义它们。

关于design-patterns - UIVIew 或 UIViewController 中的复杂 View 设置? (设计决策),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4629461/

相关文章:

design-patterns - 在进行任何编码之前,应进行多少设计?

java - 为什么我们通过调用 Acceptor.accept() 而不是 Visitor.visit() 来启动 Visitor?

ios - XCode 8.3.1 缺少默认的 C++ ObjectiveC 编译器。无法构建项目

ios - 一起动画 UIView 的框架和圆角半径

iphone - 多个按钮的单一 View 上的不同图像

带有默认值的 JavaScript JSON API 解析器?

c# - DDD : How should adding and removing related entities be modelled?

iphone - 缩小 UIScrollView 中的大 UIImageView

objective-c - 为存储的信息提供唯一标识符

iphone - 将地理坐标转换为CGPoint并在UIView中画线