处理应用程序中的不同视图控制器:创建自定义内容视图控制器

时间:2012-02-13 14:48:48

标签: ios architecture uiviewcontroller

在应用程序开发期间,我遇到了支持正确的应用程序架构的问题。对于我目前正在开发的应用程序来说,情况确实如此。特别是,我需要支持如下的架构。

enter image description here

如您所见,MainViewController是应用程序的主控制器,必须在应用程序生命周期内管理不同的控制器。在这种情况下,MainController是一种集中控制器(其视图的子视图始终位于前面,将其视为菜单视图),用于管理应用程序的不同状态(例如LOGIN_AREA,HOME_AREA等)

在下文中,我写了一些考虑因素来实现上述架构。

由于MainViewController需要始终在其他视图(UIviewControllerX的视图)前显示其视图的子视图,因此我将其设置为rootViewController

由于MainViewController必须由其他控制器访问(例如UIViewControllers1),因此它们需要(弱)引用它。

MainViewController有一个公共方法来管理应用程序状态。它存储当前控制器并将所选控制器视图添加到其视图中作为其子视图。例如:

- (void)manageController
{
   if(currentState == LOGIN_AREA)
   {
      self.currentController = [[[LoginViewController alloc] init] autorelease];
   }

   // other stuff here...

   [self.view addSubView:self.currentController.view];
} 

上述模式似乎有效,但我不确定它是否正确。另外,如果UIViewController(例如UIViewController1)必须是UINavigationController,情况会变得复杂。

我已阅读View Controller Programming Guide for iOS。特别是,我发现Creating Custom Content View Controllers部分很有趣,但我没有找到任何一个例子来创建一个自定义的部分。

所以,我的问题如下。

您能否给我建议以实现以下架构?或者你能给我一些开发自定义内容视图控制器的技巧吗?

1 个答案:

答案 0 :(得分:1)

对于那些对此感兴趣的人。

为了实现类似的机制,有两种不同的方式。

1)实现自定义内容容器。这是一项复杂的任务,但它是可能的。有关详情,请阅读writing-high-quality-view-controller

2)使用新的iOS 5 API。有关详细信息,可以阅读UIViewController Class Reference中的实施容器视图控制器部分。

希望它有所帮助。