【问题标题】:How to access the stack in UINavigationController如何访问 UINavigationController 中的堆栈
【发布时间】:2011-09-23 18:58:15
【问题描述】:
视图控制器
当前的视图控制器
导航堆栈。
@property(nonatomic, copy) NSArray * viewControllers
讨论
根视图控制器在索引 0 处
数组,后视图控制器位于
索引 n-2,顶部控制器是
在索引 n-1 处,其中 n 是
数组中的项目。
分配一个新的视图数组
该属性的控制器是
相当于调用
setViewControllers:animated: 方法
动画参数设置为 NO。
我很困惑如何访问堆栈我在导航控制器中有三个视图——根视图控制器、sti 测试位置、sti 地图。
如何访问堆栈?
【问题讨论】:
标签:
iphone
objective-c
ios
uinavigationcontroller
【解决方案1】:
假设您的导航控制器具有三个视图控制器,您应该能够使用 self.navigationController 从三个视图控制器中的任何一个访问导航控制器。
所以如果你想获得堆栈中的第二个视图控制器,你应该这样做——
UIViewController * viewController = [self.navigationController.viewControllers objectAtIndex:1];
这是假设导航控制器上至少有两个视图控制器。
【解决方案2】:
UINavigationControllers 有一个名为viewControllers 的属性,如您在上面所述。由于这是一个视图控制器数组,因此在此层次结构中引用特定视图控制器与访问数组中的任何其他对象没有什么不同。
UIViewController *theControllerYouWant = [self.navigationController.viewControllers objectAtIndex:(theIndexOfYourViewController)];
此外,请查看 iOS 开发人员库中的 Navigation Controllers 文章,特别是名为“修改导航堆栈”的部分。
【解决方案3】:
viewControllers 属性返回的数组就是栈。它们的顺序与显示的顺序相同。索引 0 处的控制器是您开始使用的控制器。您当前查看的控制器是最高索引。由于索引是从零开始计数的,因此最后一项索引将是计数 (n)-1。
现在您在帖子中说“浏览量”。视图和视图控制器之间是有区别的。如果您谈论的是同时可见的多个部分,那么您谈论的是视图而不是视图控制器。导航控制器用于处理多个视图控制器。如果您正在处理视图而不是想要访问当前视图控制器视图的子视图 myViewController.view.subviews 他们以类似的方式对自己进行排序。