如何访问UINavigationController中的堆栈

viewControllers

当前在导航堆栈上的视图控制器。

@property(nonatomic, copy) NSArray * viewControllers 

讨论

根视图控制器位于数组的索引0处,后视图控制器位于索引n-2,顶部控制器位于索引n-1,其中n是数组中的项目数。

将一个新的视图控制器数组分配给该属性相当于将animated参数设置为NO的setViewControllers:animated:方法。

我很困惑如何访问堆栈我有三个视图在导航控制器 – 根视图控制器,stitesting位置,sti地图。

我怎样才能访问堆栈?

viewControllersUINavigationControllers具有一个名为viewControllers的属性。 由于这是一个View Controller的数组,因此在这个层次结构中引用特定的视图控制器与访问数组中的其他对象没有什么不同。

 UIViewController *theControllerYouWant = [self.navigationController.viewControllers objectAtIndex:(theIndexOfYourViewController)]; 

另外,请查看iOS开发者库中的导航控制器文章,特别是“修改导航堆栈”部分。

假设你的意思是你的导航控制器有三个视图控制器,你应该能够使用self.navigationController从三个视图控制器中的任何一个访问导航控制器。

所以如果你想获得堆栈中的第二个视图控制器,你应该这样做 –

 UIViewController * viewController = [self.navigationController.viewControllers objectAtIndex:1]; 

这是假定导航控制器上至less有两个视图控制器。

由viewControllers属性返回的数组是堆栈。 他们按照与他们相同的顺序排列。 索引0处的控制器是您开始使用的控制器。 您目前正在查看的控制器是最高的索引。 由于索引从零开始计数,因此最后一个索引将是count(n)-1。

现在你在post中说“意见”。 视图和视图控制器之间是有区别的。 如果您正在讨论同时显示的多个部分,那么您正在讨论视图而不是视图控制器。 导航控制器用于处理多个视图控制器。 如果你正在处理的视图比你想要访问当前视图控制器的视图的子视图myViewController.view.subviews他们以相似的方式自己sorting。