【问题标题】:ViewController acrchitecture查看控制器架构
【发布时间】:2012-08-05 22:44:16
【问题描述】:

我想构建一个应用程序,其主视图大部分时间都在屏幕上。部分视图是不变的并显示主要控件。但是,有一个特殊的子视图取决于应用程序的状态。应用程序的状态以特殊的“状态对象”呈现。一次只能有一个“状态对象”处于活动状态,但它们可以有非常不同的逻辑,并且应该以不同的用户界面呈现(在这个特殊的子视图中)。

显然,我可以通过分析当前状态对象的类型,在主视图的ViewController中进行处理。我可以创建一个带有大量特定于状态对象可能具有的每个可能类的代码的 biiiig 开关,并在每次添加新的状态对象子类时添加一些代码......但这听起来不是一个好的架构对我来说。我希望状态对象或特定于它们的不同 ViewController 来控制这个特殊的视图。不幸的是,我对视图、视图控制器和委托感到有点迷失,不明白我究竟该如何实现这一点。

【问题讨论】:

    标签: iphone objective-c model-view-controller architecture uiviewcontroller


    【解决方案1】:

    每个不同的子视图类型都是一个单独的视图控制器,具有自己的关联视图。

    【讨论】:

    • 这个想法是“切换逻辑”或子视图特定逻辑进入视图控制器,而不是应用程序委托或超级视图控制器。这样可以避免您提到的麻烦
    【解决方案2】:

    请务必记住,View Controller 和 UI (XIB) 是两个不同的东西。您可以实现一个控制器来处理各种子视图的逻辑,然后使用带有 NibName 的 init 根据上下文将该控制器的实例绑定到不同的 UI...

    这使您可以编写一次控制逻辑,并根据需要生成尽可能多的不同 UI 体验。 XIB 都需要绑定到一组集中的 IBOutlets,您将万事俱备。鉴于子视图仍然存在于您的应用程序的整体上下文中,因此很有可能在子视图中存在大量相似之处。这种将一个视图控制器用于潜在的多个 XIB 的策略有助于简化沿这些方向的开发。

    祝你好运。

    【讨论】:

      【解决方案3】:

      如果您需要在这些 slate 视图中处理大量逻辑内容,您可能希望将它们作为视图控制器,然后在需要时使用容器方法将它们添加到主视图控制器,如 Session 102 - Implementing UIViewController Containment 所示。基本上是这样的:

      [self addChildViewController:childViewController];
      [childViewController didMoveToParentViewController:self];
      [self.view addSubView:childViewController.view];
      

      你甚至可以使用这个方法来制作过渡动画:transitionFromViewController: toViewController: duration: options: animations: completion:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2011-01-28
        • 2013-12-28
        • 2014-06-11
        • 1970-01-01
        相关资源
        最近更新 更多