【问题标题】:Complex view setup in UIVIew or UIViewController? (Design decision)UIVIew 或 UIViewController 中的复杂视图设置? (设计决定)
【发布时间】:2011-01-07 19:29:27
【问题描述】:

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

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

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

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

第二个变体接近于使用笔尖,当您将完整的视图设置为控制器的视图时。

不打算在这里发动一场宗教战争,而是寻找两种方法的论据。

【问题讨论】:

    标签: design-patterns ios uiview uiviewcontroller


    【解决方案1】:

    我可以想到几个标准来选择一个选项。

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

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

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

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

    【讨论】:

      【解决方案2】:

      在这种情况下考虑 MVC(模态、视图、控制器)。

      一个不错的选择是创建一个单独的 UIView 类并将 UIViewController 的视图设置为此(或将其作为子视图添加到控制器的视图),然后使用委托方法进行从 UIView 子类到控制器的任何用户交互。

      但是,如果您只打算在控制器的视图中拥有一个视图(因此没有交换视图、翻转等),您基本上可以只为所有 UI 使用控制器的视图。

      【讨论】:

        猜你喜欢
        • 2010-11-18
        • 1970-01-01
        • 1970-01-01
        • 2012-08-05
        • 2012-04-26
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多