关于iPhone:了解UIViewController层次结构

Understanding UIViewController hierarchy

好吧-此刻我的大脑正在被炸,所以任何帮助都将不胜感激。

我的应用程序中有多个UIViewController的子类。让我们称它们为VC_A, VC_B, VC_C, VC_D

用户通过触摸每个视图上的按钮进行交互。

因此我的AppDelegate添加了VC_A:

1
2
3
//Add the view controller's view to the window and display.  
[self.window addSubview:viewController.view];  
[self.window makeKeyAndVisible];

VC_A然后使用presentModalViewController加载VC_B:

1
2
3
    VC_B *tempView = [[VC_B alloc] initWithNibName:@"temploadingscreen" bundle:nil];
    [self presentModalViewController:tempView animated:NO];
    [tempView release];

,直到获得

的层次结构

1
2
3
4
VC_A
- VC_B  
    - VC_C  
       - VC_D

但是当我在VC_D上调用presentModalViewController将我带到VC_C时,我希望它是VC_C的新实例,而不是原始实例。

所以我的问题是如何执行此操作-我是否需要使用[self dismissModalViewControllerAnimated:NO];删除视图的旧实例。

在我完成搜索后,将不胜感激任何帮助,但是所有教程和内容均使用导航栏来控制导航-由于应用程序的类型,我无法使用其中的一个。在UIViewController的新实例之间正确移动的任何有效代码示例都很好。


只需使用

创建一个新实例

1
2
3
ViewController_C *newVC_C = [[ViewController_C alloc] init]
[self presentModalViewController:newVC_C animated:NO];
[newVC_C release];


我决定以不同的方式执行此操作,从而完全满足我的需求。

我所做的是我创建了基本的ViewController,但在xib中没有任何内容,在viewDidAppear方法中,我基于全局NSNumber的值调用了其他viewControllers(使用presentModalViewController)。

因此,当我转到其他任何一个视图控制器而不是它们调用另一个viewController时,它们只需设置全局变量即可指示要加载的视图,然后关闭当前视图(使用dismissModalViewController)。

这样,每个viewControllers实例都将关闭,并释放内存。

我创建了一个示例项目,并将其放在github https://github.com/sregorcinimod/Open

只需查看下载内容,您就会在其中看到它