UIVIew或UIViewController中的复杂视图设置?(设计决定)

Eik*_*iko 5 design-patterns uiviewcontroller uiview ios

目前我以编程方式设置了大部分UI.有两种方法可以安排属于屏幕的视图(另外还有使用nib):

  • 在视图控制器中,管理所有视图(它是一个视图控制器!)
  • 创建一个自定义的UIView子类,然后在控制器中连接它

我知道两者都有效,但在哪种情况下你会选择哪种解决方案?

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

当您将完整视图设置为控制器视图时,第二个变体接近使用nib.

不打算在这里开始宗教战争,而是寻找两种方法的论据.

Jon*_*nah 4

我可以想出几个标准来选择一个选项或另一个选项。

如果视图集是或可能是在许多屏幕上显示的可重用组件,我会倾向于创建 UIView 子类。

如果视图控制器需要直接访问多个视图,我会在控制器中构造它们。我尝试使自定义 UIView 类不透明容器,以便它们的控制器只需要与父视图交互,而不是通过其子视图进行挖掘。

如果视图集不能提供处理单个概念的 API,例如,如果视图层次结构的存在只是为了正确设置视图的 z-index,并且这些视图处理显示不相关的数据,那么我将再次在控制器。UIView 子类应该负责仅显示一组连贯的数据,或者以一致的方式管理一组子视图。

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