如何在UINavigationController中访问堆栈

时间:2011-06-27 19:39:27

标签: iphone objective-c ios uinavigationcontroller

  

viewControllers

     

目前的视图控制器   导航堆栈。

@property(nonatomic, copy) NSArray * viewControllers
     

讨论

     

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

     

分配新的视图数组   这个属性的控制器是   相当于调用   setViewControllers:animated:方法   将动画参数设置为NO。

我很困惑如何访问堆栈我在导航控制器中有三个视图 - 根视图控制器,sti测试位置,sti map。

如何访问堆栈?

3 个答案:

答案 0 :(得分:46)

UINavigationControllers有一个名为viewControllers的属性,如上所述。由于这是一个视图控制器数组,因此引用此层次结构中的特定视图控制器与访问数组中的任何其他对象没有什么不同。

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

另外,请查看iOS开发人员库中的Navigation Controllers文章,特别是“修改导航堆栈”一节。

答案 1 :(得分:5)

假设您的导航控制器有三个视图控制器,您应该可以使用self.navigationController从三个视图控制器中的任何一个访问导航控制器。

因此,如果你想在堆栈中获得第二个视图控制器,你应该这样做 -

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

这假设导航控制器上至少有两个视图控制器。

答案 2 :(得分:4)

viewControllers属性返回的数组是堆栈。它们的排序顺序与它们显示的顺序相同。索引0处的控制器是您启动的控制器。您当前正在查看的控制器是最高指数。由于索引从零开始计算,因此最后一项索引将是count(n)-1。

现在你在帖子中说“观看”了。视图和视图控制器之间存在差异。如果您正在谈论同时可见的多个部分,那么您正在谈论的是视图而不是视图控制器。导航控制器用于处理多个视图控制器。如果您正在处理视图而不是想要访问当前视图控制器视图的子视图myViewController.view.subviews他们以类似的方式排序。