0

我创建了一个基于“单一视图应用程序”Xcode 模板的应用程序。它有一个导航控制器和一个 rootViewController。

当我在 rootViewController 上时

[self presentModalViewController:nextModalViewController animated:YES];

新的视图控制器是动画的。

我的问题是这个。我已经按顺序呈现了很多viewController,也就是

A > B > C > D

或者换句话说,我使用 presentModalViewController 从 A 呈现 B,从 B 呈现 C 等等。是的,我必须使用 presentModalViewController 因为我有一个特殊的动画在 viewControllers 之间进行转换,我不能使用 [self.navigationController push...

我的问题是:当我对导航堆栈使用 presentModalViewController 时会发生什么?控制器是否被推送到某个堆栈?有没有办法获得对在给定时间呈现的所有导航控制器的引用?类似导航堆栈的东西?我的意思是,假设我在 D 上,我想获得 D 之前呈现的所有控制器的列表。

我知道我可以创建属性并将其传递。我只是想知道是否已经在 iOS 上构建了一些可以做到这一点的东西。

谢谢。

4

2 回答 2

1

在 iOS 5 及更高版本中,UIViewController具有presentingViewController返回呈现接收器的视图控制器的属性。在 iOS 4 及更早版本中,使用显示视图控制器的parentViewController属性来访问其显示视图控制器。因此,您可以通过适当地访问这些属性,从 D 访问例如 C 视图控制器。有关更多信息,请参阅文档。

如果你想以链的形式访问所有的视图控制器,你可以这样做:

UIViewController *node = self;
while (node != nil) {
    // do something with the view controller, then skip to its parent
    node = node.presentingViewController;
    // or node = node.parentViewController; in iOS 4 or older
}
于 2012-10-17T14:59:48.160 回答
-1

我随后会viewControllers在每次模态演示后从您的 UINavigationController 检查属性的大小,并检查它是否增长。

UIViewController *theControllerYouWant = [self.navigationController.viewControllers objectAtIndex:(theIndexOfYourViewController)];
于 2012-10-17T15:00:12.543 回答