视图层次结构 - iPhone

时间:2012-03-12 11:05:49

标签: iphone ios cocoa uiviewcontroller

我正在制作多人游戏。我的第一个屏幕,应显示登录表单(非模态)。当它完成时,它应该调用一个委托给我的“根类”,“根类”应该删除这个视图控制器并添加另一个。然后当游戏结束时,将使用另一个委托方法调用“根类”,它应该显示另一个屏幕等..

我有3个想法,我想知道哪个会更好。

a)我的根类是一个uiviewcontroller,它在调用委托方法时添加/删除子视图。

b)我的根类是NSObject子类,它必须在必要时更改窗口rootViewControoler。

c)没有导航栏的导航控制器。但我如何管理观点层次?

管理我的视图hieararchy有什么更好的逻辑?除了a和b之外还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

a)或b)都可以。选择取决于诸如模型层用于确定视图呈现顺序的程度之类的因素。如果表示序列是动态的,那么辅助类设计(您的选项b)在MVC分离方面可能更纯。最终,决定取决于您的应用程序的细节和复杂性。

一般来说,我在做出这样的设计决定时会问一些问题:

  • 它如何影响内存管理
  • 设计将如何影响效果
  • 设计是否适当单独关注
  • 设计灵活最小化依赖性
  • 设计是否利用框架/平台设计模式

答案 1 :(得分:0)

在你提出的选项中,我喜欢c)最好的。

选项a)不合适,因为它忽略了视图控制器的主要部分 - 管理内容的整页视图。在像你这样的情况下使用addSubview要求你跳过一堆障碍,以便管理视图层次结构中所有这些对象的内存,你最终会重新发明UIViewController轮。 / p>

选项b)没问题,但不知何故它似乎永远不会让我满意。只是在willy-nilly中交换根目录似乎有风险 - 这就是UIViewController要做的事情,它可能会比你或我做得更好。无论如何,如果你这样做,你将失去动画的任何好处。这带给我们......

选项c)。 UINavigationController被编程为完成您特定情况所需的工作。您可以使用UINavigationController- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated来管理层次结构。你可以做一个正常的推送,但是当主游戏VC位于前面并需要来自系统的资源时,这将使之前的VC保持在内存中。简而言之,我认为你的c)简单有效。

与此处的帖子脚本一样,请注意除了a,b,c之外还有其他选择。你可能会使用UIPageViewController,虽然我不推荐它。 iOS 5引入了UIStoryboard作为管理应用UI的方法,并UIStoryboardSegue来管理转换。查看文档,如果您的目标是iOS 5,它们也可以为您提供帮助。但听起来简单的导航控制器对你有用。