在基于导航的应用程序中拥有UINavigationController的最佳实践?

时间:2010-03-01 03:12:00

标签: iphone cocoa-touch uiviewcontroller uinavigationcontroller

我的小应用程序越来越庞大,我正在寻找有关视图控制器和导航控制器管理/所有权的最佳实践建议。

这就是我现在正在做的事情:

  1. AppController是一个创建并拥有UINavigationController实例的单例。 app控制器以及导航控制器可以通过类似+sharedController的方法进行全局访问。
  2. 应用程序中希望推送新视图控制器的每个视图控制器基本上都是这样做的:

    NextViewController * nextViewController = [[NextViewController alloc] init]; [[[AppController sharedController] navigation] pushViewController:nextViewController ...]; [nextViewController release];

  3. 通过这种方式,所有“叶子”视图都负责创建下一个视图并推动它,导航控制器位于每个人都可以到达的地方。

    但我自己做了这个。由于通过视图控制器导航是一个非常重要的架构,我想知道是否有人在这里有更好或更周到的方法。

    感谢。

2 个答案:

答案 0 :(得分:7)

每个视图控制器都有navigationController属性。如果UIViewController是导航堆栈的一部分,则设置此属性,以便您可以获取对UINavigationController的引用。所以,不必引用AppController(或者甚至可能只有一个 - 你可以把它放在AppDelegate中),你可以这样做:

NextViewController * nextViewController = [[NextViewController alloc] init];
[self.navigationController pushViewController:nextViewController ...];
[nextViewController release];

答案 1 :(得分:3)

为什么不在那些需要推送的视图中使用self.navigationController?你需要在AppController中做的唯一事情就是在导航控制器上推送初始视图。