我只是想知道如何以编程方式浏览navigationController堆栈?
我熟悉这个方法:
[self.navigationController popToRootViewControllerAnimated:YES];
以及:
[self.navigationController popViewControllerAnimated:YES];
但是可以以编程方式转到导航控制器中的任何视图控制器吗?
请看我的照片:
http://s18.postimage.org/iq1l4f721/test_xcodeproj_Main_Storyboard_storyboard.jpg?
我知道我可以使用故事板来查看任何视图但是我认为这会继续将新视图推入堆栈并最终(理论上)我会遇到问题吗?
由于
卡尔。
答案 0 :(得分:2)
是的,如果你知道堆栈中控制器的索引,或者你有引用它的引用。
像这样:
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:index] animated:TRUE];
干杯!
答案 1 :(得分:1)
你试过吗
for (UIViewController * viewController in self.navigationController.viewControllers) {
if ([viewController isKindOfClass:[Number2Class class]]) {
[self.navigationController popToViewController:viewController animated:YES];
}
}
答案 2 :(得分:0)
使用此代码导航到所需的viewcontroller
NSArray *vcs = self.navigationController.viewControllers;
for (UIViewController *cont in vcs) {
if([cont class] == [YOUR_VIEWCONTROLLER_NAME class])
{
NSLog(@"Class Found");
}
答案 3 :(得分:0)
UINavigationController
有属性 NSArray *viewControllers
,其中包含当前的一组视图控制器(历史记录)。
setViewControllers:animated:
- 用指定的项目替换当前由导航控制器管理的视图控制器。 (覆盖历史)
popToViewController:animated:
- 弹出视图控制器,直到指定的视图控制器位于导航堆栈的顶部。 (此处您需要传递历史记录中存在的实例 - 见上文)
回到#1 ...