IOS。导航控制器。重用ViewControllers

时间:2011-12-21 13:32:57

标签: ios uiviewcontroller uinavigationcontroller pushviewcontroller

这是我的问题。 我有一个基于视图的应用程序。 我在NavigationController添加了AppDelegate,如下所示。

UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:_viewController];    
navigationController = [nvc retain];
[nvc retain];     
[self.window addSubview:navigationController.view];

这段代码来自互联网。我不知道它是否正确。

在所有viewControllers中,我正在执行以下操作来推送新视图。

UIViewController *newViewController = [[NewViewController alloc] init];
[self.navigationController pushViewController:newViewController animated:TRUE];
  1. 我不知道为什么self.navigationController在推送​​的视图中没有返回nil。是以某种方式使用AppDelegate导航控制器吗?

  2. 如果我想重用一些视图控制器。我的意思是每次我想调用视图控制器时都不会分配init。我怎样才能做到这一点?在AppDelegate中存储参考?还有其他解决办法吗?

  3. 我的导航很复杂。即A,B,C是视图控制器。 A呼叫B. B呼叫C. C呼叫A.如果我继续呼叫我每次都在创建一个新的视图控制器。如何重用这些视图控制器(或在调用新视图时弹出并从堆栈中释放视图)?

  4. 感谢。

1 个答案:

答案 0 :(得分:0)

1)navigationControllerUIViewController的属性。如果视图控制器是导航控制器层次结构的一部分,那么它将被设置。

2)你必须自己管理。在推送该视图控制器的对象中存储引用将是实现此目的的常用方法。因此,如果A按B,则A存储对B等的引用

3)没有办法让UINavigationController为你做这件事。根据您的尝试,我假设您来自Android背景? Android有特定的方法可以做到这一点,但在iOS中你必须自己编写代码。您可以通过查看UINavigationControllerDelegate及其navigationController:didShowViewController:animated:方法来执行此操作。您可以看到推送视图控制器的时间以及它是否已经在堆栈中然后更新导航堆栈(即viewControllers的{​​{1}}属性)以将其从它所在的位置移除。但这可能会让用户感到困惑。